Funzioni definite dall'utente SQL Server 2005 contrassegnato erroneamente come non deterministico?
-
08-07-2019 - |
Domanda
Relativamente a questa domanda , ho deciso di controllare gli UDF nel mio data warehouse (che dovrebbe in gran parte sono stati deterministici) e ne ho trovati diversi che non dovrebbero essere.
Ad esempio:
CREATE FUNCTION [udf_YearFromDataDtID]
(
@DATA_DT_ID int
)
RETURNS int
AS
BEGIN
RETURN @DATA_DT_ID / 10000
END
Viene visualizzato in questa query:
SELECT ROUTINE_NAME
FROM INFORMATION_SCHEMA.ROUTINES
WHERE IS_DETERMINISTIC = 'NO'
AND ROUTINE_TYPE = 'FUNCTION'
ORDER BY ROUTINE_NAME
Perché questo?
Soluzione
Yikes - apparentemente, RICHIEDE LO SCHEMABINDING da specificare in altro modo potrebbe causare problemi di prestazioni
ALTER FUNCTION [udf_YearFromDataDtID]
(
@DATA_DT_ID int
)
RETURNS int
WITH SCHEMABINDING
AS
BEGIN
RETURN @DATA_DT_ID / 10000
END
Sembra che potrei ottenere alcuni miglioramenti delle prestazioni correggendoli. Nizza.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow