وضع علامة الدالات المعرفة من قبل المستخدم SQL خادم 2005 بشكل غير صحيح على أنها غير القطعية؟

StackOverflow https://stackoverflow.com/questions/309492

سؤال

هذا السؤال ، قررت للتحقق من UDFS في مستودع البيانات الخاصة بي (والتي يجب إلى حد كبير دينا كانت حتمية)، ولقد وجدت عدة التي ليست التي ينبغي أن يكون.

وعلى سبيل المثال:

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

لماذا هذا؟

هل كانت مفيدة؟

المحلول

وييكيس - على ما يبدو، فإنه يتطلب SCHEMABINDING تحدد آخرين من الحكمة أن <لأ href = "http://kbalertz.com/952217/query-references-nondeterministic-function-slower-Server-Server.aspx" يختلط = " noreferrer "> يمكن أن يسبب مشاكل الأداء

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

ويبدو أنني يمكن الحصول على بعض ويعزز الأداء من خلال تحديد هذه. لطيفة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top