Partilhar via


Funções Escalares Definidas pelo Usuário para In-Memory OLTP

Aplica-se a:SQL ServerBanco de Dados SQL do AzureInstâ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.

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