Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Introdução às funções definidas pelo usuário no SQL Server


O SQL Server é fornecido com uma coleção de funções internas que permitem que você execute uma variedade de operações. Cada função integrada serve a um propósito específico e não pode ser modificada. Se uma função serve ao seu propósito, você pode ir em frente e usá-la.

Mas e se você não conseguir encontrar uma função que atenda ao seu propósito?

Então é hora de escrever sua própria função definida pelo usuário.


O que é uma função definida pelo usuário?


Uma função definida pelo usuário (UDF) é uma rotina que pode receber parâmetros, realizar cálculos ou outras ações e retornar um resultado. E como o nome sugere, é definido e criado pelo usuário. Nesse caso, o “usuário” é o programador SQL, DBA ou quem escreveu a função.

O termo função definida pelo usuário a distingue das funções internas fornecidas com o SQL Server.

Você pode especificar se a UDF aceitará ou não quaisquer parâmetros e, em caso afirmativo, seus nomes, tipos de dados etc. Por exemplo, você pode escrever uma UDF que aceite uma ID de produto como argumento. A função pode então usar isso em seu cálculo. Isso significa que a saída da função dependerá da entrada fornecida a ela quando for chamada.

Depois que uma UDF for criada, ela poderá ser invocada.

Invocando uma função definida pelo usuário


O código dentro da função não é executado quando a função é criada. Só é executado quando a função é invocada .

"Invocar" uma função às vezes é chamado de "chamar" uma função. É quando você faz com que a função faça o que foi feita para fazer. Basicamente, você cria uma função e ela fica lá esperando para ser chamada.

Você pode invocar uma UDF do seu código T-SQL, assim como chamaria uma função do sistema. Por exemplo, você pode usar um UDF em um WHERE cláusula para restringir os resultados de um SELECT demonstração. Você também pode usá-lo na lista de colunas para retornar.

UDFs também podem ser usadas em colunas computadas. Isso pode ser útil se você precisar de uma coluna computada para acessar dados em outra coluna.

Parâmetros


Uma função definida pelo usuário pode aceitar até 1024 parâmetros de entrada. No entanto, você também pode definir uma função sem parâmetros, se necessário.

Um exemplo de uma função interna sem nenhum parâmetro é GETDATE() . Esta função simplesmente retorna o timestamp do sistema de banco de dados atual. Não há necessidade de passar nenhum parâmetro para obter isso.

Um exemplo de função definida pelo usuário com um único parâmetro pode ser aquela que retorna os detalhes de contato de um cliente com base no ID do cliente. Ao chamar a função, você passa o ID do cliente para a função como parâmetro. A função pode então procurar os detalhes do cliente e devolvê-los na variável de retorno. Se você passar o ID de um cliente diferente, a função retornará os detalhes desse cliente.

Benefícios das funções definidas pelo usuário


Alguns dos principais benefícios das UDFs incluem o seguinte.
Programação modular
UDFs permitem que você escreva o código uma vez e depois o chame quantas vezes forem necessárias. Não há necessidade de reescrever o mesmo código toda vez que você precisar fazer a mesma coisa. Basta chamar a função em vez disso. Isso também é benéfico se algo mudar. Você só precisa atualizá-lo em um lugar – a função. Se você não usou a função, precisará atualizá-la em vários lugares em todo o aplicativo.
Desempenho
As UDFs reduzem o custo de compilação do código T-SQL ao armazenar em cache os planos e reutilizá-los para execuções repetidas. A UDF não precisa ser analisada novamente e re-otimizada a cada uso. Isso resulta em tempos de execução muito mais rápidos.
Tráfego de rede reduzido
Uma operação que filtra dados com base em uma restrição complexa que não pode ser expressa em uma única expressão escalar pode ser expressa como uma função. A função pode então ser invocada no WHERE cláusula para reduzir o número de linhas enviadas ao cliente.

UDFs também podem ter outros benefícios mais específicos, como no exemplo anterior que mencionei com a coluna computada acessando dados em outra tabela.

Tipos de funções definidas pelo usuário


Existem dois tipos de funções definidas pelo usuário T-SQL:
Funções escalares
Funções escalares definidas pelo usuário retornam um único valor de dados. Você define o tipo do valor na função. O tipo de retorno pode ser qualquer tipo de dados, exceto texto , ntext , imagem , cursor e carimbo de data e hora .
Funções com valor de tabela
Funções com valor de tabela (TVFs) retornam uma tabela. Seu tipo de retorno é, portanto, tabela . Existem dois tipos de TVF:TVF inline e TVF multi-instrução. Um TVF inline não tem um corpo de função. Sua tabela de retorno é o resultado de um único SELECT demonstração. Um TVF multi-instrução, por outro lado, tem um corpo de função. Com TVFs de várias instruções, você especifica a estrutura da tabela na variável de retorno.

Você também pode criar funções escalares e com valor de tabela como funções definidas pelo usuário do Common Language Runtime (CLR).

A partir do SQL Server 2005 (9.x), você pode escrever funções definidas pelo usuário em qualquer linguagem de programação Microsoft .NET Framework, como Microsoft Visual Basic .NET ou Microsoft Visual C#.