Fundamentos da função definida pelo usuário
Assim como as funções em linguagens de programação, as funções definidas pelo usuário Microsoft SQL Server são rotinas que aceitam parâmetros, executam uma ação, como um cálculo complexo e retornam o resultado dessa ação como um valor. O valor de retorno pode ser um único valor escalar ou um conjunto de resultados.
Benefícios da função definida pelo usuário
Os benefícios de usar funções definidas pelo usuário em SQL Server são:
Eles permitem programação modular.
Você pode criar a função uma vez, armazená-la no banco de dados e chamá-la quantas vezes quiser em seu programa. Funções definidas pelo usuário podem ser modificadas independentemente do código-fonte do programa.
Elas permitem execução mais rápida.
Semelhantemente aos procedimentos armazenados, Transact-SQL as funções definidas pelo usuário reduzem o custo de compilação do código Transact-SQL colocando os planos em cache e reusando-os para execuções repetidas. Isso significa que a função definida pelo usuário não precisa ser reanalisada e reotimizada em cada utilização resultando em tempos de execução mais rápidos.
As funções CLR oferecem uma vantagem de desempenho significativa sobre funções Transact-SQL para tarefas de computação, manipulação de cadeias de caracteres e lógica de negócios. Funções Transact-SQL são mais adequadas à lógica intensiva de acesso a dados.
Eles podem reduzir o tráfego de rede.
Uma operação que filtra dados com base em alguma restrição complexa que não pode ser expressa em uma única expressão escalar pode ser expressa como uma função. Em seguida, a função pode ser invocada na cláusula WHERE para reduzir o número ou linhas enviadas ao cliente.
Observação |
---|
As funções definidas pelo usuário Transact-SQL em consultas só podem ser executadas em um único thread (plano de execução serial). |
Componentes de uma função definida pelo usuário
As funções definidas pelo usuário podem ser escritas em Transact-SQL ou em qualquer linguagem de programação .NET. Para obter mais informações sobre como usar linguagens .NET em funções, consulte Funções CLR definidas pelo usuário.
Todas as funções definidas pelo usuário têm a mesma estrutura de duas partes: um cabeçalho e um corpo. A função obtém zero ou mais parâmetros de entrada e retorna um valor escalar ou uma tabela.
O cabeçalho define:
O nome da função com o nome do esquema/proprietário opcional
O nome do parâmetro de entrada e tipo de dados
Opções aplicáveis ao parâmetro de entrada
O tipo de dados e nome opcional do parâmetro de retorno
Opções aplicáveis ao parâmetro de retorno
O corpo define a ação ou lógica, a função a ser executada. Ou contém:
Uma ou mais instruções Transact-SQL que executam a lógica de função
Uma referência a um assembly .NET
O exemplo a seguir mostra uma função definida pelo usuário Transact-SQL simples e identifica os componentes principais da função. A função avalia uma data fornecida e retorna um valor que designa a posição dessa data em uma semana.
IF OBJECT_ID(N'dbo.GetWeekDay', N'FN') IS NOT NULL
DROP FUNCTION dbo.GetWeekDay;
GO
CREATE FUNCTION dbo.GetWeekDay -- function name
(@Date datetime) -- input parameter name and data type
RETURNS int -- return parameter data type
AS
BEGIN -- begin body definition
RETURN DATEPART (weekday, @Date) -- action performed
END;
GO
O exemplo a seguir mostra a função usada em uma instrução Transact-SQL.
SELECT dbo.GetWeekDay(CONVERT(DATETIME,'20020201',101)) AS DayOfWeek;
GO
Aqui está o conjunto de resultados.
DayOfWeek
---------
6
(1 row(s) affected)
Consulte também