इस MSDN फ़ोरम थ्रेड से मैं सीखता हूँ कि
<ब्लॉकक्वॉट>
[द] OPTION
क्लॉज का इस्तेमाल केवल स्टेटमेंट लेवल पर किया जा सकता है
इसलिए आप इसे व्यू डेफिनिशन या इनलाइन टीवीएफ आदि के अंदर एक क्वेरी एक्सप्रेशन के भीतर उपयोग नहीं कर सकते हैं। आपके मामले में इसका उपयोग करने का एकमात्र तरीका OPTION
के बिना टीवीएफ बनाना है। खंड और इसे उस क्वेरी में निर्दिष्ट करें जो TVF का उपयोग करती है। हमारे पास एक बग है जो OPTION
. के उपयोग की अनुमति देने के अनुरोध को ट्रैक करता है किसी भी क्वेरी एक्सप्रेशन के अंदर क्लॉज (उदाहरण के लिए, if exists()
.) या सीटीई या देखें)।
और आगे
<ब्लॉकक्वॉट>आप उस विकल्प के डिफ़ॉल्ट मान को udf के अंदर नहीं बदल सकते। आपको इसे udf को संदर्भित करने वाले कथन में करना होगा।
तो आपके उदाहरण में, आपको OPTION
. निर्दिष्ट करना होगा जब आप कॉल . करते हैं आपका कार्य:
CREATE FUNCTION [liste_jour]
(@debut date,@fin date)
RETURNS TABLE
AS
RETURN
(
WITH CTE as(
SELECT @debut as jour
UNION ALL
SELECT DATEADD(day, 1, jour)
FROM CTE
WHERE DATEADD(day, 1, jour) <= @fin)
SELECT jour FROM CTE -- no OPTION here
)
(बाद में)
SELECT * FROM [liste_jour] ( @from , @to ) OPTION ( MAXRECURSION 365 )
ध्यान दें कि आप एक दूसरा टीवीएफ रखकर इस पर काम नहीं कर सकते हैं जो सिर्फ उपरोक्त पंक्ति करता है - यदि आप कोशिश करते हैं तो आपको वही त्रुटि मिलती है। "[द] OPTION
खंड का उपयोग केवल कथन स्तर पर किया जा सकता है", और यह अंतिम है (अभी के लिए)।