وضع علامة الدالات المعرفة من قبل المستخدم SQL خادم 2005 بشكل غير صحيح على أنها غير القطعية؟
-
08-07-2019 - |
سؤال
هذا السؤال ، قررت للتحقق من 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
ويبدو أنني يمكن الحصول على بعض ويعزز الأداء من خلال تحديد هذه. لطيفة.
لا تنتمي إلى StackOverflow