Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Aplica-se a:SQL Server
Banco de Dados SQL do Azure
Instância Gerenciada SQL do Azure
No SQL Server 2016 (13.x), pode criar e colocar funções nativamente compiladas, definidas pelo utilizador e escalares. Também pode alterar estas funções definidas pelo utilizador. A compilação nativa melhora o desempenho da avaliação de funções definidas pelo utilizador no Transact-SQL.
Quando se altera uma função definida pelo utilizador e compilada nativamente, a aplicação permanece disponível enquanto a operação está a ser executada e a nova versão da função está a ser compilada.
Para construções T-SQL suportadas, consulte Funcionalidades Suportadas para Módulos T-SQL Compilados Nativamente.
Criar, Eliminar e Alterar Funções Definidas pelo Utilizador
Utiliza-se a FUNÇÃO CRIAR para criar a função definida pelo utilizador compilada nativamente, a FUNÇÃO DROP para remover a função definida pelo utilizador, e a FUNÇÃO ALTER para alterar a função. BEGIN ATOMIC WITH é necessário para as funções definidas pelo utilizador.
Para informações sobre a sintaxe suportada e quaisquer restrições, consulte os seguintes tópicos.
ELIMINAR FUNÇÃO (Transact-SQL)
A sintaxe DROP FUNCTION para funções escalares definidas pelo utilizador compiladas nativamente é a mesma que para funções definidas pelo utilizador interpretadas.
O procedimento armazenado sp_recompile (Transact-SQL) pode ser usado com a função escalar definida pelo utilizador compilada nativamente. Isto resultará na recompilação da função usando a definição que existe nos metadados.
O exemplo seguinte mostra um UDF escalar da base de dados de exemplo AdventureWorks2022.
CREATE FUNCTION [dbo].[ufnLeadingZeros_native](@Value int)
RETURNS varchar(8)
WITH NATIVE_COMPILATION, SCHEMABINDING
AS
BEGIN ATOMIC WITH (TRANSACTION ISOLATION LEVEL = SNAPSHOT, LANGUAGE = N'English')
DECLARE @ReturnValue varchar(8);
SET @ReturnValue = CONVERT(varchar(8), @Value);
DECLARE @i int = 0, @count int = 8 - LEN(@ReturnValue)
WHILE @i < @count
BEGIN
SET @ReturnValue = '0' + @ReturnValue;
SET @i += 1
END
RETURN (@ReturnValue);
END
Chamar Funções Definidas pelo Utilizador
Funções escalares definidas pelo utilizador compiladas nativamente podem ser usadas em expressões, no mesmo local que funções escalares integradas e funções escalares definidas pelo utilizador interpretadas. Funções definidas pelo utilizador e escalares compiladas nativamente também podem ser usadas com a instrução EXECUT, numa instrução Transact-SQL e num procedimento armazenado compilado nativamente.
Pode usar estas funções escalares definidas pelo utilizador em procedimentos de armazenamento compilados nativamente e funções definidas pelo utilizador compiladas nativamente, e sempre que as funções integradas são permitidas. Também pode usar funções nativamente compiladas e escalares definidas pelo utilizador em módulos tradicionais de Transact-SQL.
Pode usar estas funções escalares definidas pelo utilizador em modo interop, sempre que uma função escalar interpretada definida pelo utilizador possa ser utilizada. Esta utilização está sujeita a limitações de transações entre contentores cruzados, conforme descrito na secção Níveis de Isolamento Suportados para Transações entre Contentores em Transações com Tabelas Otimizadas para Memória. Para mais informações sobre o modo interop, consulte Aceder a tabelas otimizadas para memória utilizando Transact-SQL Interpretado.
Funções definidas pelo utilizador e compiladas nativamente, escalares, requerem um contexto de execução explícito. Para obter mais informações, consulte Cláusula EXECUTE AS (Transact-SQL). EXECUTE AS CALLER não é suportado. Para obter mais informações, consulte EXECUTE (Transact-SQL).
Para obter a sintaxe suportada para instruções Executar do Transact-SQL, para funções escalares definidas pelo utilizador e compiladas nativamente, veja EXECUTE (Transact-SQL). Para a sintaxe suportada para executar as funções definidas pelo utilizador num procedimento armazenado compilado nativamente, veja Funcionalidades Suportadas para Módulos T-SQL Compilados Nativamente.
Dicas e Parâmetros
O suporte para dicas de tabela, junção e consulta dentro de funções escalares definidas pelo utilizador, compiladas nativamente, é equivalente ao suporte para essas dicas em procedimentos armazenados compilados nativamente. Tal como nas funções escalares definidas pelo utilizador interpretadas, as dicas de consulta incluídas numa consulta Transact-SQL que referenciam uma função definida pelo utilizador e escalar compilada nativamente não afetam o plano de consulta para essa função definida pelo utilizador.
Os parâmetros suportados para as funções definidas pelo utilizador escalares e compiladas nativamente são todos os parâmetros suportados por procedimentos armazenados compilados nativamente, desde que sejam permitidos para funções definidas pelo utilizador escalares. Um exemplo de parâmetro suportado é o parâmetro com valores de tabela.
Schema-Bound
O seguinte aplica-se a funções nativamente compiladas e escalares definidas pelo utilizador.
Deve estar ligado ao esquema, usando o argumento WITH SCHEMABINDING nas funções CREATE e ALTER FUNCTION.
Não pode ser eliminado ou alterado quando referenciado por um procedimento armazenado limitado por esquema ou função definida pelo utilizador.
SHOWPLAN_XML
Funções definidas pelo utilizador e compiladas nativamente, escalares, suportam SHOWPLAN_XML. Conforma-se ao esquema geral de SHOWPLAN_XML, tal como os procedimentos armazenados compilados nativamente. O elemento base para as funções definidas pelo utilizador é <UDF>.
STATISTICS XML não é suportado para funções definidas pelo utilizador e compiladas nativamente, escalares. Quando executa uma consulta que referencia a função definida pelo utilizador, com o STATISTICS XML ativado, o conteúdo XML é devolvido sem a parte da função definida pelo utilizador.
Permissions
Tal como nos procedimentos armazenados compilados nativamente, as permissões para objetos referenciados a partir de uma função escalar compilada nativamente e definida pelo utilizador são verificadas quando a função é criada. A FUNÇÃO CRIAR falha se o utilizador suplantado não tiver as permissões corretas. Se alterações de permissão resultarem em o utilizador imitado deixar de ter as permissões corretas, as execuções subsequentes da função definida pelo utilizador falham.
Quando utiliza uma função escalar definida pelo utilizador e compilada nativamente dentro de um procedimento armazenado compilado nativamente, as permissões para executar a função definida pelo utilizador são verificadas no momento em que o procedimento externo é criado. Se o utilizador personificado pelo procedimento externo não tiver permissões EXEC para a função definida pelo utilizador, a criação do procedimento armazenado falha. Se alterações de permissões resultarem em o utilizador deixar de ter as permissões EXEC, a execução do procedimento externo falha.
Ver também
Funções incorporadas (Transact-SQL)
Salvar um plano de execução em formato XML