Funciones definidas por el usuario ¿SQL Server 2005 se marcó incorrectamente como no determinista?
-
08-07-2019 - |
Pregunta
Relacionado con esta pregunta , decidí verificar los UDF en mi almacén de datos (que en gran medida debería han sido deterministas), y encontré varios que no son los que deberían ser.
Por ejemplo:
CREATE FUNCTION [udf_YearFromDataDtID]
(
@DATA_DT_ID int
)
RETURNS int
AS
BEGIN
RETURN @DATA_DT_ID / 10000
END
Aparece en esta consulta:
SELECT ROUTINE_NAME
FROM INFORMATION_SCHEMA.ROUTINES
WHERE IS_DETERMINISTIC = 'NO'
AND ROUTINE_TYPE = 'FUNCTION'
ORDER BY ROUTINE_NAME
¿Por qué es esto?
Solución
Yikes - al parecer, REQUIERE que se especifique SCHEMABINDING de otra manera podría causar problemas de rendimiento
ALTER FUNCTION [udf_YearFromDataDtID]
(
@DATA_DT_ID int
)
RETURNS int
WITH SCHEMABINDING
AS
BEGIN
RETURN @DATA_DT_ID / 10000
END
Parece que podría obtener algunos aumentos de rendimiento al solucionarlos. Agradable.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow