Compartilhar via


Recriando procedimentos armazenados como funções

Este tópico descreve como determinar se as lógicas de procedimento armazenado existentes devem ou não ser recriadas como funções definidas pelo usuário. Por exemplo, para invocar um procedimento armazenado diretamente de uma consulta, empacote o código como função definida pelo usuário novamente.

Em geral, se o procedimento armazenado retornar um conjunto de resultados exclusivo, defina uma função com valor de tabela. Se o procedimento armazenado computar um valor escalar, defina uma função escalar.

Critérios para funções com valor de tabela

Se um procedimento armazenado encontrar os critérios a seguir, ele será um bom candidato a ser recriado em uma função com valor de tabela:

  • A lógica é exprimível em uma instrução SELECT exclusiva, porém é um procedimento armazenado em vez de exibição, apenas por conta da necessidade de parâmetros. Esse cenário pode ser controlado com uma função com valor de tabela embutida.

  • O procedimento armazenado não executa operações de atualização, exceto para variáveis de tabela.

  • Não há nenhuma necessidade de instruções EXECUTE dinâmicas

  • O procedimento armazenado retorna um conjunto de resultados.

  • A principal finalidade do procedimento armazenado é criar resultados intermediários que serão carregados na tabela temporária que, em seguida, é consultada em uma instrução SELECT. As instruções INSERT...EXEC podem ser escritas mediante funções com valor de tabela. Por exemplo, considere a seguinte seqüência:

    INSERT #temp EXEC sp_getresults
    SELECT ...
    FROM #temp, t1
    WHERE ...
    

    O procedimento armazenado sp_getresults pode ser recriado como função com valor de tabela, por exemplo, fn_results(), significando que as instruções precedentes podem ser recriadas como:

    INSERT #temp
    SELECT ...
    FROM fn_results(), t1
    WHERE ...
    

Recriação de procedimentos armazenados estendidos usando CLR

As funções CLR fornecem uma alternativa mais confiável e evolutiva para os procedimentos armazenados estendidos. Muitos procedimentos armazenados estendidos executam alguma tarefa computacional que é mais difícil de expressar em Transact-SQL. Esses procedimentos armazenados podem ser recriados por meio de CLR, em razão dos benefícios descritos acima. Além disso, os procedimentos armazenados estendidos que retornam conjunto de resultados mediante acesso a um recurso externo, como arquivo ou serviço da Web, podem ser recriados usando-se uma função CLR com valor de tabela. Para obter mais informações, consulte Criando funções CLR.