Пользовательские функции SQL Server 2005 неправильно помечен как недетерминированный? - PullRequest
4 голосов
/ 21 ноября 2008

Относительно этого вопроса , я решил проверить UDF в моем хранилище данных (которое должно было быть в значительной степени детерминированным), и нашел несколько таких, которые не должны быть.

Например:

CREATE FUNCTION [udf_YearFromDataDtID]
(
    @DATA_DT_ID int
)
RETURNS int
AS
BEGIN
    RETURN @DATA_DT_ID / 10000
END

Появляется в этом запросе:

SELECT  ROUTINE_NAME
FROM    INFORMATION_SCHEMA.ROUTINES
WHERE   IS_DETERMINISTIC = 'NO'
        AND ROUTINE_TYPE = 'FUNCTION'
ORDER BY ROUTINE_NAME

Почему это?

1 Ответ

5 голосов
/ 21 ноября 2008

Yikes - очевидно, ТРЕБУЕТСЯ, чтобы SCHEMABINDING было указано иначе может вызвать проблемы с производительностью

ALTER FUNCTION [udf_YearFromDataDtID]
(
    @DATA_DT_ID int
)
RETURNS int
WITH SCHEMABINDING
AS
BEGIN
    RETURN @DATA_DT_ID / 10000
END

Похоже, я мог бы получить некоторые улучшения производительности, исправив их. Ницца.

...