एसक्यूएल सर्वर में वैकल्पिक पैरामीटर खरीदे गए स्टोर?


125

मैं SQL Server 2008 में कुछ संग्रहीत procs लिख रहा हूं, और सोच रहा हूं कि क्या वैकल्पिक इनपुट मापदंडों की अवधारणा यहां संभव है?

मुझे लगता है कि मैं हमेशा उन मापदंडों के लिए NULL में पास हो सकता हूं जिन्हें मैं उपयोग नहीं करना चाहता हूं, संग्रहीत खरीद में मूल्य की जांच करें, फिर वहां से चीजें ले लें, लेकिन मुझे दिलचस्पी थी अगर अवधारणा यहां उपलब्ध है। धन्यवाद!


2
एरलैंड की साइट पर एक लंबा पढ़ा, वह गतिशील खोज स्थितियों पर कुछ महान जानकारी है: sommarskog.se/dyn-search.html
हारून बर्ट्रेंड

जवाबों:


201

आप इस तरह की घोषणा कर सकते हैं

CREATE PROCEDURE MyProcName
    @Parameter1 INT = 1,
    @Parameter2 VARCHAR (100) = 'StringValue',
    @Parameter3 VARCHAR (100) = NULL
AS

/* check for the NULL / default value (indicating nothing was passed */
if (@Parameter3 IS NULL)
BEGIN
    /* whatever code you desire for a missing parameter*/
    INSERT INTO ........
END

/* and use it in the query as so*/
SELECT *
FROM Table
WHERE Column = @Parameter

क्या होगा यदि पैरामीटर अद्वितीय पहचानकर्ता का प्रकार है? पूर्व। @userId अद्वितीय पहचानकर्ता
RK शर्मा

1
किसी को भी आश्चर्य हो रहा है, इसके लिए @RKSharma का जवाब देना - यह यूनीकॉल्डिफायर्स के साथ ही काम करता है।
रिनुकसु

55

हाँ यही है। पैरामीटर घोषित करें:

@Sort varchar(50) = NULL

अब आपको पैरामीटर को भी पास करने की आवश्यकता नहीं है। यह NULL (या जो भी आप डिफ़ॉल्ट को चुनते हैं) के लिए डिफ़ॉल्ट होगा।


आप भी जरूरत नहीं है= NULL
OMG Ponies

3
क्या आप वाकई इसकी आवश्यकता नहीं हैं?
माइक कोल

43
OMG पॉनीज़, यदि आप = <NULL | कुछ डिफ़ॉल्ट मान> शामिल नहीं करते हैं, तो पैरामीटर की आवश्यकता होगी। आप इसे NULL के रूप में पास कर सकते हैं, लेकिन फिर आप उस तर्क को उस एप्लिकेशन पर लागू कर सकते हैं जो प्रक्रिया का उपयोग करती है।
हारून बर्ट्रेंड

10
हारून की बात को जोड़ते हुए। "= NULL" का उपयोग करना बेहतर है यदि आप मौजूदा संग्रहित खरीद में एक नया वैकल्पिक पैरामीटर जोड़ रहे हैं। कारण यह है कि, आप इस खरीद को कॉल करने वाले सभी कोड से अवगत नहीं हो सकते हैं। इसलिए, जब तक आप "= NULL" का उपयोग करके इसे वैकल्पिक नहीं बनाते हैं, तब तक उन सभी स्थानों के लिए जिन्हें आप मूल्य में पारित करने से चूक गए हैं, यह टूट जाएगा।
नॉनोनार्ड

nanonerd: 2014 और इसके बाद के संस्करण में आप कम से कम एक डिफ़ॉल्ट सेट कर सकते हैं और जब आप उस पैरामीटर को पास नहीं करते हैं, तो यह और त्रुटि नहीं करेगा। 2014 में कम से कम यह तरीका मेरे लिए काम कर रहा था
बिलपेकॉक

0

2014 और उसके बाद कम से कम आप एक डिफ़ॉल्ट सेट कर सकते हैं और जब आप उस पैरामीटर को पारित नहीं करते हैं तो यह और त्रुटि नहीं करेगा। आंशिक उदाहरण: तीसरा पैरामीटर वैकल्पिक के रूप में जोड़ा गया है। केवल पहले दो मापदंडों के साथ वास्तविक प्रक्रिया का निष्पादन ठीक काम किया

exec getlist 47,1,0

create procedure getlist
   @convId int,
   @SortOrder int,
   @contestantsOnly bit = 0
as
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.