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?

È stato utile?

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
scroll top