Entrar com a conta da Microsoft
Entrar ou criar uma conta.
Olá,
Selecionar uma conta diferente.
Você tem várias contas
Escolha a conta com a qual você deseja entrar.

Sintomas

User-Defined Functions (UDFs) que são implementados no Transact-SQL e que retornam um único valor de dados são conhecidos como UDFs (T-SQL Scalar User-Defined Functions). 

O recurso de inlining da UDF scalar foi introduzido no Microsoft SQL Server 2019. Esse recurso pode melhorar o desempenho das consultas que invocam UDFs escalares T-SQL em que a execução do UDF é o gargalo main. O inlining de UDF escalar T-SQL transforma automaticamente UDFs inlineáveis em expressões relacionais. 

Essa CU (atualização cumulativa) inclui várias correções nas seguintes áreas para cenários em que uma consulta que usa o Dimensionamento do UDF inlining pode retornar uma mensagem de erro ou resultados inesperados:

  • O erro de incompatibilidade de tipo ocorrerá se o tipo de retorno da UDF for um sql_variant (adicionado em SQL Server CU2 2019).

  • A invocação de UDF desp_executesqlcancela a execução (adicionada em SQL Server CU2 2019).

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

  • Condições fora da memória e vazamentos de memória ocorrem devido a UDFs escalares muito grandes (adicionados em SQL Server CU2 2019).

  • As variáveis não niializadas usadas em instruções de condição (IF-ELSE) causam erros (adicionados em SQL Server CU2 2019).

  • O erro de conversão explícita ocorrerá se um UDF tiver o parâmetro sql_variant(adicionado no CU7 SQL Server 2019).

  • O erro ocorrerá se a função escalar referenciar CHECKSUM(adicionada no CU7 SQL Server 2019).

  • A invocação UDF que tem muitas reavaliações de expressão escalar pode causar um erro de agendador não produtivo (adicionado em SQL Server CU7 2019).

    Observação: a correção desse problema às vezes pode causar uma regressão de desempenho. Para atenuar essa regressão de desempenho, você pode desabilitar a correção original ativando o TF (sinalizador de rastreamento) 13156.

    A Microsoft está trabalhando em uma correção para essa regressão de desempenho que estará disponível em uma CU futura.

  • O erro ocorrerá se a consulta de referência da UDF usar OPTION (RECOMPILE)(adicionada em SQL Server CU7 2019).

  • Erros de permissão ocorrem se as exibições invocarem UDFs inlined (adicionados em SQL Server CU9 2019).

  • As violações de acesso ocorrerão se oquery_tsql_scalar_udf_inlinedXEvent for usado (adicionado no CU9 SQL Server 2019).

  • O comportamento inconsistente ocorre porque o Dimensionamento de UDF não respeita a dica de consulta QUERY_OPTIMIZER_COMPATIBILITY_LEVEL_n(adicionada em SQL Server CU9 2019).

  • A inlining UDFs contém agregações que podem causar erros de agendador não produtivos (adicionados em SQL Server CU9 2019).

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

  • Depois de atualizar para o CU9, ocorrerá uma violação de acesso se um objeto invocar uma UDF (UDF1) escalonável que tenha um UDF (UDF2) escalonável que é usado como parâmetro de entrada (adicionado em SQL Server CU11 2019).

  • A inlining UDFs pode causar erros e gerar códigos de erro 6846, 1011 e 107 (adicionados em SQL Server CU11 2019).

  • Inlining UDFs que são executados como a conta não sysadmin pode retornar a mensagem de erro: "Ocorreu um erro grave no comando atual.  Os resultados, se houver, devem ser descartados" (adicionados em SQL Server CU16 2019).

  • Uma violação de acesso ocorrerá se tabelas temporárias forem invocadas dentro de UDFs usando sinônimos (adicionados no Microsoft SQL Server 2022 CU1 e SQL Server CU19 2019).

  • Uma violação de acesso ocorrerá se a definição de UDF contiver apenas rótulos GOTO e uma instruçãoRETURN (adicionada no CU1 de 2022 SQL Server e SQL Server 2019 CU19).

  • O UDF escalar retorna resultados em diferentes formatos de data e hora quando o recurso de inlining scalar UDF é ativado (adicionado em SQL Server CU3 2022 e SQL Server CU20 2019).

  • Um arquivo de despejo será gerado se uma consulta que tem uma cláusula GROUP BY usar UDFs inlinados em uma instrução SELECT sem uma função agregada (adicionada em SQL Server CU12 2022 e SQL Server 2019 CU26).

  • Erro "O máximo de procedimento armazenado, função, gatilho ou nível de aninhamento de exibição excedido (limite 32)" ocorrerá se o recurso de inlining da UDF Escalar estiver ativado, mesmo que o nível de aninhamento não seja excedido (adicionado em SQL Server CU12 de 2022 e SQL Server CU26 de 2019).

  • A corrupção de memória ocorrerá em sqllang.dll!CProchdr::FDeriveInlineabilityOfScalarUdf se o recurso de inlining da UDF Scalar estiver ativado (adicionado no SQL SERVER 2022 CU12 e SQL Server 2019 CU26).

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

  • Se a UDF fizer referência a determinadas funções intrínsecas (por exemplo, @@ROWCOUNT) que podem alterar os resultados quando a UDF estiver inlined (adicionada em SQL Server CU2 2019).

  • Quando as funções de agregação são passadas como parâmetros para um UDF escalar (adicionado em SQL Server CU2 2019).

  • Se a UDF fizer referência a exibições internas (por exemplo: OBJECT_ID) (adicionadas em SQL Server CU2 2019).

  • Se a UDF usar métodos XML (adicionados em SQL Server CU4 2019).

  • Se a UDF contiver uma instrução SELECTque usa a cláusulaORDER BY, mas não TOP 1(adicionada em SQL Server CU4 2019).

  • Se a instruçãoSELECT executar uma atribuição junto com a cláusula ORDER BY (por exemplo, SELECT @x = @x +1 FROM table ORDER BY column_name) (adicionada em SQL Server CU4 2019).

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

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

  • Se a UDF fizer referência à função STRING_AGG (adicionada em SQL Server CU5 2019).

  • Se a definição de UDF fizer referência a tabelas remotas (adicionadas em SQL Server CU6 2019).

  • Se a consulta de chamada da UDF usar GROUPING SETS, CUBEou ROLLUP (adicionado em SQL Server CU6 2019).

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

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

  • Se a UDF contiver referências a WITH XMLNAMESPACES(adicionadas em SQL Server CU11 2019).

  • Se a consulta invocando a UDF tiver CTEs (Expressões comuns de tabela) (adicionadas em SQL Server CU11 2019).

  • Se a definição de UDF contiver tabelas temporárias ou sinônimos para tabelas temporárias (adicionadas em SQL Server CU1 de 2022 e cu19 SQL Server 2019).

  • Se a definição de UDF tiver uma instruçãoSELECTjuntamente com uma cláusulaDISTINCTem várias colunas de atribuição (adicionada em SQL Server CU4 de 2022 e cu20 de SQL Server 2019).

  • Se a UDF contiver uma instrução SELECT que usa a cláusula TABLESAMPLE PERCENT e várias atribuições variáveis (adicionadas em SQL Server 2022 CU7).

  • Se existir uma consulta INSERT em uma tabela referenciada por uma exibição indexada que contém uma UDF (adicionada em SQL Server CU12 de 2022 e SQL Server 2019 CU26).

Depois de atualizar para SQL Server cu2 2019, mas antes de atualizar para SQL Server CU5 2019, você deve reavaliar se uma UDF é elegível para inlining. Para fazer isso, atualize UDFs escalares qualificados por meio de qualquer um dos seguintes métodos:

  • Execute sp_refreshsqlmodule para UDFs escalares aplicáveis. Para obter mais informações sobre esse procedimento armazenado do sistema, consulte sp_refreshsqlmodule (Transact-SQL).

  • Altere ou recrie a UDF escalar existente usando definições, permissões e propriedades existentes. Para obter mais informações, consulte ALTER FUNCTION (Transact-SQL).

O comando a seguir gera um script para atualizar os metadados de quaisquer UDFs escalares inlinados 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 SQL Server CU5 2019, retomaremos automaticamente a incapacidade de derivação de UDF durante a compilação.

Resolução

Esse problema é corrigido nas seguintes atualizações cumulativas para SQL Server:

Cada nova atualização cumulativa para SQL Server contém todos os hotfixes e todas as correções de segurança incluídas na atualização cumulativa anterior. Confira as últimas atualizações cumulativas 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?

Quer mais opções

Explore os benefícios da assinatura, procure cursos de treinamento, saiba como proteger seu dispositivo e muito mais.

As comunidades ajudam você a fazer e responder perguntas, fazer comentários e ouvir especialistas com conhecimento avançado.

Essas informações foram úteis?

Qual é o seu grau de satisfação com a qualidade do idioma?
O que afetou sua experiência?
Ao pressionar enviar, seus comentários serão usados para aprimorar os produtos e serviços da Microsoft. Seu administrador de TI poderá coletar esses dados. Política de Privacidade.

Agradecemos seus comentários!

×