निर्धारण कार्य गैर-निर्धारक है

एसक्यूएल सर्वर 10.50.1600

मैं एक गणना कॉलम में एक स्केलर मूल्यवान फ़ंक्शन का उपयोग करने की कोशिश कर रहा हूं। मैं इसके बाद एक सूचकांक बनाना चाहता हूं।

ALTER TABLE [dbo].[Modified]
ADD [StartQDate] AS ([dbo].[QDay]([StartDT])) PERSISTED,
    [EndQDate]   AS ([dbo].[QDay]([EndDT])) PERSISTED;

जब मैं गणना कॉलम बनाने का प्रयास करता हूं तो मुझे निम्न त्रुटि मिल रही है।

तालिका 'संशोधित' में गणना की गई कॉलम 'StartQDate' को जारी नहीं किया जा सकता क्योंकि कॉलम गैर-निर्धारिती है।

इस तथ्य को छोड़कर कि मेरे स्केलर फ़ंक्शन QDay को परिभाषित किया गया है

FUNCTION [dbo].[QDay] 
(
@Date DATETIME
)
RETURNS INT
AS
BEGIN
    RETURN YEAR(@Date)*10000+MONTH(@Date)*100+DAY(@Date)
END

जो माइक्रोसॉफ्ट के अनुसार निर्धारिती होना चाहिए।

भले ही मैं फ़ंक्शन को बदलूं

FUNCTION [dbo].[QDay] 
(
@Date DATETIME
)
RETURNS INT
AS
BEGIN
    RETURN 1
END

मुझे अभी भी गैर-निर्धारक त्रुटि संदेश मिलता है।

मेरे पास यह एक और सर्वर पर काम कर रहा है। मुझे क्या करना है इस पर एक नुकसान है।

3
स्केलर फ़ंक्शन का उपयोग क्यों करें? EndQDate वर्ष के रूप में (एंड डीटी) * 10000 + माह (एंड डीटी) * 100 + दिन (एंड डीटी) ?
जोड़ा लेखक gvee, स्रोत
हो सकता है कि DATETIME निर्धारिती नहीं है? आपके द्वारा लिंक किया गया पृष्ठ इंगित करता है कि अन्य फ़ंक्शंस निर्धारित नहीं हैं जब तक कि DATETIME के साथ उपयोग नहीं किया जाता है, और DATETIME गारंटीकृत निर्धारिती कार्यों में सूचीबद्ध नहीं है।
जोड़ा लेखक taz, स्रोत
संभवतः प्रासंगिक: stackoverflow.com/questions/3037330/…
जोड़ा लेखक taz, स्रोत

1 उत्तर

समाधान जोड़ना था

WITH SCHEMABINDING

as suggested in this question Sql Server deterministic user-defined function

FUNCTION [dbo].[QDay] 
(
    @Date DATETIME
)
RETURNS INT
WITH SCHEMABINDING
AS
BEGIN
    RETURN YEAR(@Date)*10000+MONTH(@Date)*100+DAY(@Date)
END
5
जोड़ा