CORREÇÃO: problemas de inlining de UDF Scalar no SQL Server 2019

Aplica-se a: SQL Server 2019 on LinuxSQL Server 2019 on Windows

Sintomas


Funções definidas pelo usuário (UDFs) implementadas noTransact-SQL e que retornou um único valor de dados é conhecido como T-SQL ScalarFunções definidas pelo usuário (UDFs). 
O Microsoft SQL Server 2019 apresenta o UDF escalarRecurso de inlining que pode melhorar o desempenho de consultas que chamam T-SQLUDFs escalares, em que a execução UDF é o afunilamento principal. O redimensionamento de UDF escalar T-SQL transforma automaticamente UDFs habilitados em inline em expressões relacionais. 
Esta atualização cumulativa inclui várias correções em todos osseguintes áreas para cenários em que uma consulta que usa o inlining de UDF escalar poderetornar um erro ou resultados inesperados:
  • Erro de tipo incompatibilidade se o tipo de retorno do UDF for sql_variant (adicionado no Microsoft SQL Server 2019 CU2) 
  • A invocação UDF a partir de sp_executesql aborta a execução (adicionada no Microsoft SQL Server 2019 Cu2)
  • UDFs fazendo referência a rótulos sem um comando GOTO associado retornam resultados incorretos (adicionados no Microsoft SQL Server 2019 Cu2)
  • Condições de falta de memória e vazamentos de memória devido a grandes UDFs escalas (adicionadas no Microsoft SQL Server 2019 Cu2)
  • Variáveis não inicializadas usadas na condição (se-ELSE) instruções causam erros (adicionados no Microsoft SQL Server 2019 Cu2)
Esta cumulativaa atualização também bloqueia a inlining nos seguintes cenários:
  • Se o UDF fizer referência a determinadas funções intrínsecas (por exemplo, @ @ROWCOUNT) que podem alterar os resultados quando embutidas (adicionadas no Microsoft SQL Server 2019 Cu2)
  • Funções agregadas sendo transmitidas como parâmetros para um UDF escalar (adicionado no Microsoft SQL Server 2019 Cu2)
  • Se o UDF fizer referência a exibições internas (por exemplo: OBJECT_ID) (adicionado no Microsoft SQL Server 2019 Cu2)
  • Se o UDF usar métodos XML (adicionado no Microsoft SQL Server 2019 Cu4)
  • Se o UDF contiver um pedido SELECT with sem um "TOP 1" (adicionado no Microsoft SQL Server 2019 Cu4)
  • Se a consulta SELECT executar uma atribuição em conjunto com a cláusula ORDER BY (por exemplo, SELECT @x = @x + 1 da ordem da tabela por column_name) (adicionada no Microsoft SQL Server 2019 Cu4)
  • Se o UDF contiver várias instruções de retorno (adicionadas emMicrosoft SQL Server 2019 CU5)
  • Se o UDF for chamado a partir de uma instrução RETURN (adicionado no Microsoft SQL Server 2019 CU5)
  • Se o UDF fizer referência à função STRING_AGG (adicionada no Microsoft SQL Server 2019 CU5)
Depois de atualizar para o Microsoft SQL Server 2019 CU2, mas antes de CU5, reavalie se um UDF équalificado para inliningização, atualize UDFs escalares qualificáveis por meio de um dosseguintes métodos:
  • Execute sp_refreshsqlmodule para obter detalhes sobre os UDFs escalares aplicáveis (consulte sp_refreshsqlmodule (Transact-SQL) para obter detalhes sobre esse procedimento armazenado do sistema)
  • Alterar ou Recrie o UDF escalar existente com definição existente, permissões e definir propriedades (consulte alterar FUNÇÃO (Transact-SQL)
O script a seguirgera um script para atualizar metadados de UDFs escalares existentes existentes: 
/*
      Gera um script que pode ser usado para atualizar toda a escala embutida ativaUDFs.
      Observação: a sp_refreshsqlmodule não afeta permissões, propriedades estendidas
      ou defina as opções associadas ao objeto.
*/
SELECIONE ' EXECUTARsys. sp_refreshsqlmodule ' ' ' [' + OBJECT_SCHEMA_NAME (object_id) + + ']. ' + ' [' + OBJECT_NAME (object_id)
      + ']'';' COMO ' RefreshStatement '
EM sys. sql_modules
ONDE is_inlineable = 1
     E inline_type = 1;
GO 
Observação: Após vocêAtualize para o Microsoft SQL Server 2019 CU5, rederivaremos o UDF automaticamenteinlineabilidade durante a compilação.  

Status


A Microsoft confirmou que este é um problema nos produtos Microsoft listados na seção "Aplicável a".

Resolução


Esse problema foi corrigido na seguinte atualização cumulativa do SQL Server:
Sobre atualizações cumulativas do SQL Server:
Cada nova atualização cumulativa do SQL Server contém todos os hotfixes e todas as correções de segurança incluídas na atualização cumulativa anterior. Confira as atualizações cumulativas mais recentes do SQL Server:

Referências


Saiba mais sobre a terminologia que a Microsoft usa para descrever atualizações de software.