डिफ़ॉल्ट पैरामीटर मान के रूप में SQL फ़ंक्शन?


105

मैंने इसके साथ एक डिफ़ॉल्ट पैरामीटर मान को बदलने की कोशिश की:

ALTER PROCEDURE [dbo].[my_sp]
@currentDate datetime = GETDATE()

और सभी SQL पूर्व संकलक ने मुझे यह त्रुटि दी थी:

Msg 102, स्तर 15, राज्य 1, प्रक्रिया my_sp, पंक्ति 8 गलत सिंटैक्स पास '(')।

मैंने पहले ही प्रक्रिया बना ली है। (मुझे यकीन नहीं है कि अगर यह प्रासंगिक है।) मैं एक अशक्त डिफ़ॉल्ट मूल्य का उपयोग कर रहा था और बाद के लिए जाँच कर रहा था, लेकिन यह उचित नहीं लगता है। क्या मैं एक लाइन में ऐसा कर सकता हूं?


अद्यतन: मैं MSDN संग्रहीत कार्यविधि मापदंडों के विवरण से दूर जा रहा था :

[= default] पैरामीटर के लिए एक डिफ़ॉल्ट मान है। यदि एक डिफ़ॉल्ट मान परिभाषित किया गया है, तो उस पैरामीटर के लिए मान निर्दिष्ट किए बिना फ़ंक्शन को निष्पादित किया जा सकता है।

नोट:
डिफ़ॉल्ट पैरामीटर मानों को CLR फ़ंक्शंस के लिए निर्दिष्ट किया जा सकता है सिवाय varchar (मैक्सिमम) और वर्बिनरी (मैक्सिमम) के डेटा प्रकारों के।

जब फ़ंक्शन के एक पैरामीटर का डिफ़ॉल्ट मान होता है, तो फ़ंक्शन को डिफ़ॉल्ट मान को पुनर्प्राप्त करने के लिए कहा जाता है, तब कीवर्ड DEFAULT को निर्दिष्ट किया जाना चाहिए। यह व्यवहार संग्रहीत कार्यविधियों में डिफ़ॉल्ट मानों के साथ मापदंडों का उपयोग करने से भिन्न होता है जिसमें पैरामीटर को छोड़ने से डिफ़ॉल्ट मान भी निकलता है।

क्या मैं यह गलत पढ़ रहा हूँ?

बहुत धन्यवाद।

जवाबों:


160

संग्रहीत कार्यविधि पैरामीटर के लिए डिफ़ॉल्ट मान स्थिरांक होना चाहिए । आपको निम्न कार्य करने की आवश्यकता होगी ...

ALTER Procedure [dbo].[my_sp]
@currentDate datetime = null
AS
IF @currentDate is null
SET @currentDate = getdate()

36
या SET @currentDate = COALESCE (@ currentDate, GETDATE ())
SQLMenace

मैं उस पहले का उपयोग कर रहा था। "मैं एक अशक्त डिफ़ॉल्ट मूल्य का उपयोग कर रहा था और बाद के लिए जाँच कर रहा था लेकिन यह उचित नहीं लगता है।" फिर भी धन्यवाद ब्रायन।
user58044

यह समाधान एकदम सही है।
आर। कर्तन

35

मुझे नहीं लगता कि यह संभव है, आपको डिफ़ॉल्ट के रूप में एक शाब्दिक (स्थिर) मान का उपयोग करना होगा।

हालाँकि आप ऐसा कर सकते हैं:

Set @currentDate = Coalesce(@currentDate , GetDate())

13

आप निम्नानुसार कोशिश कर सकते हैं:

Set @CurrentDate=IsNull(@CurrentDate,GetDate())

8

मुझे लगता है कि आप अपने उदाहरण में वर्ग कोष्ठक से Microsoft SQL सर्वर का उपयोग कर रहे हैं।

से MSDN :

केवल एक निरंतर मान, जैसे कि चरित्र स्ट्रिंग; एक स्केलर फ़ंक्शन (या तो एक सिस्टम, उपयोगकर्ता-परिभाषित या सीएलआर फ़ंक्शन); या NULL को डिफ़ॉल्ट के रूप में उपयोग किया जा सकता है।

फ़ंक्शन GETDATE()समय-समय पर एक अलग मूल्य देता है, इसलिए यह एक स्थिर अभिव्यक्ति नहीं है।


2

यह मूल्य नियतात्मक नहीं है और इसका उपयोग नहीं किया जा सकता है


0

सुझाव:

करने के लिए डिफ़ॉल्ट सेट करें NULL

GETDATE()सामने के अंत में डिफ़ॉल्ट करें ।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.