Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

टेबल-वैल्यूड-फ़ंक्शन के अंदर सीटीई के लिए मैक्सरेकर्सन विकल्प कैसे सेट करें?

इस 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 खंड का उपयोग केवल कथन स्तर पर किया जा सकता है", और यह अंतिम है (अभी के लिए)।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. एएसपीनेट में एक एसक्यूएल सर्वर डेटाबेस से एक छवि प्रदर्शित करने का सबसे अच्छा तरीका क्या है?

  2. SQL सर्वर डेटाबेस स्नैपशॉट -2

  3. SQL सर्वर दूसरे फ़ील्ड ऑटो-इन्क्रीमेंट के साथ दो फ़ील्ड की अद्वितीय समग्र कुंजी

  4. SQL सर्वर 2017 चरण दर चरण स्थापना -1

  5. कैसे जांचें कि टेबल पर कौन से ताले हैं