Sintomas

User-Defined Functions (UDFs) implementadas no Transact-SQL e que retornam um único valor de dados são conhecidas como UDFs (funções User-Defined escalares) do T-SQL. 

Microsoft SQL Server 2019 introduziu o recurso de embutimento de UDF escalar que pode melhorar o desempenho de consultas que invocam UDFs escalares do T-SQL, em que a execução do UDF é o gargalo principal. O inlining SQL UDF escalar transforma automaticamente UDFs embutidos em expressões relacionais. 


Essa atualização cumulativa inclui várias correções nas seguintes áreas para cenários em que uma consulta que usa o embutimento de UDF escalar pode retornar um erro ou resultados inesperados:

  • Erro de incompatibilidade de tipo se o tipo de retorno da UDF for um sql_variant (adicionado no Microsoft SQL Server 2019 CU2)

  • Invocação de UDF sp_executesql anula a execução (adicionada no Microsoft SQL Server 2019 CU2)

  • UDFs que fazem referência a rótulos sem um comando GOTO associado retornam resultados incorretos (adicionados no Microsoft SQL Server 2019 CU2)

  • Condições de memória insuficiente e vazamentos de memória ocorrem devido a UDFs escalares muito grandes (adicionados no Microsoft SQL Server 2019 CU2)

  • Variáveis não inicializadas usadas em instruções IF-ELSE (condição) causam erros (adicionados no Microsoft SQL Server 2019 CU2)

  • Erro de conversão explícita se a UDF tiver SQL_VARIANT parâmetro (adicionado no Microsoft SQL Server 2019 CU7)

  • Erro gerado quando a função escalar faz referência a CHECKSUM (adicionado no Microsoft SQL Server 2019 CU7)

  • A invocação de UDF com um alto número de reavaliação de expressões escalares pode resultar em um erro de agendador sem rendimento (adicionado no Microsoft SQL Server 2019 CU7)

  • Erro gerado quando a consulta de referência UDF usa OPTION (RECOMPILE) (adicionado no Microsoft SQL Server 2019 CU7)

  • Erros de permissão gerados quando exibições invocam UDFs embutidas (adicionados no Microsoft SQL Server 2019 CU9)

  • Violações de acesso que ocorrem ao usar o query_tsql_scalar_udf_inlined XEvent (adicionado no Microsoft SQL Server 2019 CU9) 

  • Comportamento inconsistente devido à inlining de UDF escalar não respeitar a dica de consulta 'QUERY_OPTIMIZER_COMPATIBILITY_LEVEL_n' (adicionada no Microsoft SQL Server 2019 CU9)

  • As UDFs embutimento contêm agregações que podem resultar em um erro de agendador não resultante (adicionado no Microsoft SQL Server 2019 CU9) 

  • Erros de memória insuficiente devido a uma sequência de operações escalares na mesma variável em blocos condicionais (adicionados no Microsoft SQL Server 2019 CU9)

  • A violação de acesso pode ocorrer quando um objeto invoca uma UDF (UDF1) escalar embutida com uma UDF (UDF2) escalar que é usada como um parâmetro de entrada após a atualização para CU9 (adicionada no Microsoft SQL Server 2019 CU11)

  • O embutimento de UDFs pode resultar em erro com os seguintes códigos de erro 6846, 1011 e 107 (adicionados no Microsoft SQL Server 2019 CU11)

  • O inlining de UDFs em execução como a conta não sysadmin pode gerar o erro "Ocorreu um erro grave no comando atual.  Os resultados, se houver, devem ser descartados' (adicionados Microsoft SQL Server 2019 CU16)

Essa atualização cumulativa também bloqueia o embutimento nos seguintes cenários:

  • Se a UDF referenciar determinadas funções intrínsecas (por exemplo, @@ROWCOUNT) que podem alterar os resultados quando embutida (adicionadas no Microsoft SQL Server 2019 CU2)

  • Quando as funções de agregação são passadas como parâmetros para uma UDF escalar (adicionadas no Microsoft SQL Server 2019 CU2)

  • Se o UDF referencia exibições internas (por exemplo: OBJECT_ID) (adicionado no Microsoft SQL Server 2019 CU2)

  • Se o UDF usar métodos XML (adicionados Microsoft SQL Server 2019 CU4)

  • Se a UDF contiver um SELECT com ORDER BY 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 FROM table ORDER BY column_name) (adicionado no Microsoft SQL Server 2019 CU4)

  • Se a UDF contiver várias instruções RETURN (adicionadas Microsoft SQL Server 2019 CU5)

  • Se a UDF for chamada de uma instrução RETURN (adicionada no Microsoft SQL Server 2019 CU5)

  • Se a UDF referenciar a STRING_AGG função (adicionada no Microsoft SQL Server 2019 CU5)

  • Se a definição UDF referencia tabelas remotas (adicionadas Microsoft SQL Server 2019 CU6)

  • Se a consulta de chamada UDF usar GROUPING SETS, CUBE ou ROLLUP (adicionado no Microsoft SQL Server 2019 CU6)

  • Se a consulta de chamada UDF contiver uma variável usada como um parâmetro UDF para atribuição (por exemplo, SELECT @y=2, @x=UDF(@y)) (adicionado no Microsoft SQL Server 2019 CU6)

  • Se a UDF referenciar colunas criptografadas (adicionadas Microsoft SQL Server 2019 CU11)

  • Se a UDF contiver referências a 'WITH XMLNAMESPACES' (adicionada no Microsoft SQL Server 2019 CU11)

  • Se a consulta que invoca a UDF tiver CTEs (Expressões de Tabela Comum) (adicionadas no Microsoft SQL Server 2019 CU11)


Depois de atualizar para o Microsoft SQL Server 2019 CU2, mas antes de atualizar para CU5, você deve avaliar novamente se uma UDF está qualificada para inlining. Para fazer isso, atualize UDFs escalares qualificados por meio de um dos seguintes métodos:

O script a seguir gera um script para atualizar metadados para UDFs escalares embutidos existentes:

/*

Generates a script that can be used to refresh all active inlineable scalar UDFs.

Note The sp_refreshsqlmodule command does not affect any permissions, extended properties, or SET options that are associated with the object.

*/

SELECT 'EXECUTE sys.sp_refreshsqlmodule ''[' + OBJECT_SCHEMA_NAME(object_id) + +'].' + '[' + OBJECT_NAME(object_id)

+ ']'';' AS 'RefreshStatement'

FROM sys.sql_modules

WHERE is_inlineable = 1

AND inline_type = 1;

GO

Observação Depois de atualizar para o Microsoft SQL Server 2019 CU5, derivamos automaticamente a inlineabilidade do UDF durante a compilação novamente.

Resolução

Esse problema foi corrigido na seguinte atualização cumulativa para SQL Server:

Cada nova atualização cumulativa para SQL Server contém todos os hotfixes e todas as correções de segurança que foram incluídas na atualização cumulativa anterior. Confira as atualizações cumulativas mais recentes para SQL Server:

Status

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

Referências

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

Precisa de mais ajuda?

Expanda suas habilidades
Explore o treinamento
Obtenha novos recursos primeiro
Ingressar no Microsoft Insider

Essas informações foram úteis?

Qual é o seu grau de satisfação com a qualidade do idioma?
O que afetou sua experiência?

Obrigado pelos seus comentários!

×