Iniciar sesión con Microsoft
Iniciar sesión o crear una cuenta
Hola:
Seleccione una cuenta diferente.
Tiene varias cuentas
Elija la cuenta con la que desea iniciar sesión.

Síntomas

User-Defined funciones (UDF) que se implementan en Transact-SQLTransact-SQL y que devuelven un único valor de datos se conocen como funciones User-Defined escalares de T-SQL (UDF). 

La característica de inlining Scalar UDF se introdujo en Microsoft SQL Server 2019. Esta característica puede mejorar el rendimiento de las consultas que invocan UDF escalares de T-SQL en los que la ejecución udf es el principal cuello de botella. La alineación UDF escalar de T-SQL transforma automáticamente los UDF alineables en expresiones relacionales. 

Esta actualización acumulativa (CU) incluye varias correcciones en las siguientes áreas para escenarios en los que una consulta que usa la línea udf escalar puede devolver un mensaje de error o resultados inesperados:

  • Se produce un error de coincidencia de tipo si el tipo devuelto de la UDF es un sql_variant (agregado en SQL Server 2019 CU2).

  • La invocación UDF desp_executesqlcancela la ejecución (agregada en SQL Server 2019 CU2).

  • Los UDF que hacen referencia a etiquetas sin un comando GOTO asociado devuelven resultados incorrectos (agregados en SQL Server 2019 CU2).

  • Las condiciones de memoria insuficiente y pérdidas de memoria ocurren debido a udFs escalares muy grandes (agregados en SQL Server 2019 CU2).

  • Las variables no inicializadas que se usan en instrucciones de condición (IF-ELSE) causan errores (agregadas en SQL Server 2019 CU2).

  • Se produce un error de conversión explícito si un UDF tiene el parámetro de sql_variant(agregado en SQL Server 2019 CU7).

  • Se produce un error si la función escalar hace referencia CHECKSUM(agregada en SQL Server 2019 CU7).

  • La invocación UDF que tiene muchas reevaluaciones de expresiones escalares puede provocar un error del programador que no produce rendimiento (agregado en SQL Server 2019 CU7).

    Nota: La corrección de este problema puede causar a veces una regresión de rendimiento. Para mitigar esta regresión de rendimiento, puede deshabilitar la corrección original activando la marca de seguimiento (TF) 13156.

    Microsoft está trabajando en una corrección para esta regresión de rendimiento que estará disponible en una futura CU.

  • Se produce un error si la consulta de referencia UDF usa OPTION (RECOMPILE)(agregado en SQL Server 2019 CU7).

  • Los errores de permisos se producen si las vistas invocan UDF alineados (agregados en SQL Server 2019 CU9).

  • Las infracciones de acceso se producen si se usa elquery_tsql_scalar_udf_inlinedXEvent (agregado en SQL Server 2019 CU9).

  • Se produce un comportamiento incoherente porque la línea de línea UDF escalar no respeta la sugerencia de consulta de QUERY_OPTIMIZER_COMPATIBILITY_LEVEL_n(agregada en SQL Server 2019 CU9).

  • Los UDF de inlining contienen agregaciones que pueden provocar errores del programador que no producen rendimiento (agregados en SQL Server 2019 CU9).

  • Los errores de memoria insuficiente se producen debido a una secuencia de operaciones escalares en la misma variable en bloques condicionales (agregados en SQL Server 2019 CU9).

  • Después de actualizar a CU9, se produce una infracción de acceso si un objeto invoca un UDF escalar inlineable (UDF1) que tiene un UDF escalar inlineable (UDF2) que se usa como parámetro de entrada (agregado en SQL Server 2019 CU11).

  • Inlining UDFs might cause errors and generate error codes 6846, 1011, and 107 (added in SQL Server 2019 CU11).

  • Si se escriben archivos UDF que se ejecutan como la cuenta que no es de sysadmin, se puede devolver el mensaje de error "Se ha producido un error grave en el comando actual.  Los resultados, si los hay, deben descartarse" (agregado en SQL Server 2019 CU16).

  • Se produce una infracción de acceso si se invocan tablas temporales dentro de archivos UDF mediante sinónimos (agregados en Microsoft SQL Server 2022 CU1 y SQL Server 2019 CU19).

  • Se produce una infracción de acceso si la definición udf contiene solo GOTO etiquetas y una instrucción deRETURN (agregada en SQL Server 2022 CU1 y SQL Server 2019 CU19).

  • La FUNCIÓN UDF escalar devuelve los resultados en formatos de fecha y hora diferentes cuando se activa la característica Deslinde UDF escalar (agregada en SQL Server 2022 CU3 y SQL Server 2019 CU20).

  • Se genera un archivo de volcado si una consulta que tiene una cláusula de GROUP BY usa UDFs en una instrucción de SELECT sin una función de agregado (agregada en SQL Server 2022 CU12 y SQL Server 2019 CU26).

  • Error "Procedimiento almacenado máximo, función, desencadenador o nivel de anidamiento de vista excedido (límite 32)" se produce si la característica Deslinde UDF escalar está activada, incluso si no se supera el nivel de anidamiento (agregado en SQL Server 2022 CU12 y SQL Server 2019 CU26).

  • Los daños en la memoria se producen en sqllang.dll!CProchdr::FDeriveInlineabilityOfScalarUdf si se activa la característica Delining UDF escalar (agregada en SQL Server 2022 CU12 y SQL Server 2019 CU26).

Esta actualización acumulativa también bloquea la línea en los siguientes escenarios:

  • Si la UDF hace referencia a determinadas funciones intrínsecas (por ejemplo, @@ROWCOUNT) que podrían alterar los resultados cuando la UDF está en línea (agregada en SQL Server 2019 CU2).

  • Cuando las funciones de agregado se pasan como parámetros a un UDF escalar (agregado en SQL Server 2019 CU2).

  • Si la UDF hace referencia a vistas integradas (por ejemplo: OBJECT_ID) (agregadas en SQL Server 2019 CU2).

  • Si el UDF usa métodos XML (agregados en SQL Server 2019 CU4).

  • Si la UDF contiene una instrucción de SELECTque usa la cláusula deORDER BYpero no TOP 1(agregada en SQL Server 2019 CU4).

  • Si la instrucciónSELECT realiza una asignación junto con la cláusula de ORDER BY (por ejemplo, SELECT @x = @x +1 FROM table ORDER BY column_name) (agregada en SQL Server 2019 CU4).

  • Si el UDF contiene varias instrucciones de RETURN (agregadas en SQL Server 2019 CU5).

  • Si se llama al UDF desde una instrucción de RETURN (agregada en SQL Server 2019 CU5).

  • Si la UDF hace referencia a la función STRING_AGG (agregada en SQL Server 2019 CU5).

  • Si la definición UDF hace referencia a tablas remotas (agregadas en SQL Server 2019 CU6).

  • Si la consulta de llamada UDF usa GROUPING SETS, CUBEo ROLLUP (agregada en SQL Server 2019 CU6).

  • Si la consulta de llamada UDF contiene una variable que se usa como parámetro UDF para la asignación (por ejemplo, SELECT @y=2, @x=UDF(@y)) (agregada en SQL Server 2019 CU6).

  • Si la UDF hace referencia a columnas cifradas (agregadas en SQL Server 2019 CU11).

  • Si la UDF contiene referencias a WITH XMLNAMESPACES(agregadas en SQL Server 2019 CU11).

  • Si la consulta que invoca el UDF tiene expresiones de tabla comunes (CTEs) (agregadas en SQL Server 2019 CU11).

  • Si la definición de UDF contiene tablas temporales o sinónimos de tablas temporales (agregadas en SQL Server 2022 CU1 y SQL Server 2019 CU19).

  • Si la definición udf tiene una instrucción deSELECTjunto con una cláusula deDISTINCTen varias columnas de asignación (agregada en SQL Server 2022 CU4 y SQL Server 2019 CU20).

  • Si la UDF contiene una instrucción de SELECT que usa la cláusula de TABLESAMPLE PERCENT y varias asignaciones de variables (agregadas en SQL Server 2022 CU7).

  • Si existe una consulta de INSERT en una tabla a la que se hace referencia en una vista indexada que contiene una UDF (agregada en SQL Server 2022 CU12 y SQL Server 2019 CU26).

Después de actualizar a SQL Server 2019 CU2, pero antes de actualizar a SQL Server 2019 CU5, debe volver a evaluar si un UDF es elegible para la inlining. Para ello, actualice los UDF escalares válidos mediante cualquiera de los siguientes métodos:

  • Ejecute sp_refreshsqlmodule para los UDF escalares aplicables. Para obtener más información sobre este procedimiento almacenado del sistema, vea sp_refreshsqlmodule (Transact-SQL).

  • Altere o vuelva a crear el UDF escalar existente mediante definiciones, permisos y propiedades de conjunto existentes. Para obtener más información, vea ALTER FUNCTION (Transact-SQL).

El siguiente comando genera un script para actualizar los metadatos de cualquier UDF escalar alineado existente:

/*

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: Después de actualizar a SQL Server 2019 CU5, reanudaremos automáticamente la alineación UDF durante la compilación.

Solución

Este problema se ha corregido en las siguientes actualizaciones acumulativas para SQL Server:

Cada nueva actualización acumulativa de SQL Server contiene todas las revisiones y todas las correcciones de seguridad que se incluyeron con la actualización acumulativa anterior. Echa un vistazo a las últimas actualizaciones acumulativas de SQL Server:

Estado

Microsoft ha confirmado que se trata de un problema de los productos de Microsoft enumerados en la sección "Se aplica a".

Referencias

Obtenga información sobre la terminología que usa Microsoft para describir las actualizaciones de software.

¿Necesita más ayuda?

¿Quiere más opciones?

Explore las ventajas de las suscripciones, examine los cursos de aprendizaje, aprenda a proteger su dispositivo y mucho más.

Las comunidades le ayudan a formular y responder preguntas, enviar comentarios y leer a expertos con conocimientos extensos.

¿Le ha sido útil esta información?

¿Cuál es tu grado de satisfacción con la calidad del lenguaje?
¿Qué ha afectado a su experiencia?
Si presiona Enviar, sus comentarios se usarán para mejorar los productos y servicios de Microsoft. El administrador de TI podrá recopilar estos datos. Declaración de privacidad.

¡Gracias por sus comentarios!

×