Iniciar sessão com a Microsoft
Iniciar sessão ou criar uma conta.
Olá,
Selecione uma conta diferente.
Tem várias contas
Selecione a conta com a qual pretende iniciar sessão.

Sintomas

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

A funcionalidade Scalar UDF Inlining foi introduzida no Microsoft SQL Server 2019. Esta funcionalidade pode melhorar o desempenho das consultas que invocam UDFs Escalares T-SQL em que a execução do UDF é o estrangulamento principal. O Inlining do UDF Escalar T-SQL transforma automaticamente UDFs inlineáveis em expressões relacionais. 

Esta atualização cumulativa (CU) inclui várias correções nas seguintes áreas para cenários em que uma consulta que utiliza o Inlining UDF Escalar pode devolver uma mensagem de erro ou resultados inesperados:

  • O erro de erro de correspondência de tipo ocorre se o tipo de retorno do UDF for um sql_variant (adicionado no SQL Server CU2 de 2019).

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

  • As UDFs que referenciam etiquetas sem um comando GOTO associado devolvem resultados incorretos (adicionados no SQL Server CU2 de 2019).

  • As condições de memória esgotada e as fugas de memória ocorrem devido a UDFs escalares muito grandes (adicionados no SQL Server CU2 de 2019).

  • As variáveis não inicializadas utilizadas nas instruções condition (IF-ELSE) causam erros (adicionados no SQL Server CU2 de 2019).

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

  • Ocorre um erro se a função escalar referenciar CHECKSUM(adicionado no SQL Server 2019 CU7).

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

    Nota: a correção para este problema pode, por vezes, causar uma regressão de desempenho. Para mitigar esta regressão de desempenho, pode desativar a correção original ao ativar o sinalizador de rastreio (TF) 13156.

    A Microsoft está a trabalhar numa correção para esta regressão de desempenho que estará disponível numa FUTURA CU.

  • O erro ocorre se a consulta de referência da UDF utilizar OPTION (RECOMPILE)(adicionado no SQL Server 2019 CU7).

  • Os erros de permissão ocorrem se as vistas invocarem UDFs inlinados (adicionados no SQL Server CU9 de 2019).

  • As violações de acesso ocorrem se oquery_tsql_scalar_udf_inlinedXEvent for utilizado (adicionado no SQL Server 2019 CU9).

  • O comportamento inconsistente ocorre porque o Inlining UDF Escalar não respeita a sugestão de consulta QUERY_OPTIMIZER_COMPATIBILITY_LEVEL_n(adicionada no SQL Server CU9 de 2019).

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

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

  • Após atualizar para CU9, ocorrerá uma violação de acesso se um objeto invocar uma UDF (UDF1) inlineável escalar que tenha uma UDF (UDF2) inlineável escalar que é utilizada como um parâmetro de entrada (adicionado no SQL Server 2019 CU11).

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

  • Indicar UDFs que são executados como a conta não sysadmin pode devolver a mensagem de erro "Ocorreu um erro grave no comando atual.  Os resultados, se existirem, devem ser eliminados" (adicionados no SQL Server 2019 CU16).

  • Uma violação de acesso ocorre se as tabelas temporárias forem invocadas dentro de UDFs através de sinónimos (adicionados no Microsoft SQL Server 2022 CU1 e SQL Server 2019 CU19).

  • Ocorre uma violação de acesso se a definição da UDF contiver apenas GOTO etiquetas e uma instrução deRETURN (adicionada no SQL Server 2022 CU1 e SQL Server 2019 CU19).

  • O UDF escalar devolve resultados em diferentes formatos de data e hora quando a funcionalidade Delining UDF Escalar está ativada (adicionada no SQL Server CU3 de 2022 e SQL Server CU20 de 2019).

  • É gerado um ficheiro de informação de falha de sistema se uma consulta com uma cláusula de GROUP BY utilizar UDFs inlinados numa instrução SELECT sem uma função de agregação (adicionada no SQL Server 2022 CU12 e SQL Server 2019 CU26).

  • Erro "Procedimento armazenado máximo, função, acionador ou ver o nível de aninhamento excedido (limite 32)" ocorre se a funcionalidade Inlining UDF Escalar estiver ativada, mesmo que o nível de aninhamento não seja excedido (adicionado no SQL Server 2022 CU12 e SQL Server 2019 CU26).

  • Os danos na memória ocorrem em sqllang.dll!CProchdr::FDeriveInlineabilityOfScalarUdf se a funcionalidade Delinagem UDF Escalar estiver ativada (adicionada no SQL Server 2022 CU12 e SQL Server 2019 CU26).

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

  • Se a UDF fizer referência a determinadas funções intrínsecas (por exemplo, @@ROWCOUNT), isso poderá alterar os resultados quando o UDF for indicado (adicionado no SQL Server CU2 de 2019).

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

  • Se o UDF fizer referência a vistas incorporadas (por exemplo: OBJECT_ID) (adicionadas no SQL Server CU2 de 2019).

  • Se o UDF utilizar métodos XML (adicionados no SQL Server CU4 de 2019).

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

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

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

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

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

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

  • Se a consulta de chamadas UDF utilizar GROUPING SETS, CUBEou ROLLUP (adicionado no SQL Server CU6 de 2019).

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

  • Se o UDF fizer referência a colunas encriptadas (adicionadas no SQL Server 2019 CU11).

  • Se o UDF contiver referências a WITH XMLNAMESPACES(adicionado no SQL Server 2019 CU11).

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

  • Se a definição de UDF contiver tabelas temporárias ou sinónimos para tabelas temporárias (adicionados no SQL Server CU1 de 2022 e SQL Server 2019 CU19).

  • Se a definição da UDF tiver uma instruçãoSELECTjuntamente com uma cláusula deDISTINCTem múltiplas colunas de atribuição (adicionada no SQL Server 2022 CU4 e SQL Server CU20 de 2019).

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

  • Se existir uma consulta INSERT numa tabela referenciada por uma vista indexada que contém um UDF (adicionado no SQL Server 2022 CU12 e SQL Server 2019 CU26).

Depois de atualizar para o SQL Server CU2 de 2019, mas antes de atualizar para o SQL Server CU5 de 2019, deve reavaliar se uma UDF é elegível para inlining. Para tal, atualize os UDFs escalares elegíveis através de um dos seguintes métodos:

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

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

O comando seguinte 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

Nota: após atualizar para o SQL Server CU5 de 2019, iremos retomar automaticamente a inlineabilidade da UDF durante a compilação.

Resolução

Este problema foi corrigido nas seguintes atualizações cumulativas para SQL Server:

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

Estado

A Microsoft confirmou que se trata de um problema nos produtos Microsoft listados na secção "Aplica-se a".

Referências

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

Precisa de mais ajuda?

Quer mais opções?

Explore os benefícios da subscrição, navegue em cursos de formação, saiba como proteger o seu dispositivo e muito mais.

As comunidades ajudam-no a colocar e a responder perguntas, a dar feedback e a ouvir especialistas com conhecimentos abrangentes.

Estas informações foram úteis?

Quão satisfeito está com a qualidade do idioma?
O que afetou a sua experiência?
Ao selecionar submeter, o seu feedback será utilizado para melhorar os produtos e serviços da Microsoft. O seu administrador de TI poderá recolher estes dados. Declaração de Privacidade.

Obrigado pelo seu feedback!

×