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

संग्रहीत कार्यविधि में किसी पैरामीटर को अनदेखा कैसे करें यदि उसका मान शून्य है

एक बहुत अच्छा लेख है T‑SQL में गतिशील खोज स्थितियां एरलैंड सोमरस्कोग द्वारा। वह कई दृष्टिकोण बताते हैं जिनका उपयोग किया जा सकता है और गतिशील एसक्यूएल के निर्माण की तुलना @ lad2025 द्वारा सुझाए गए और OPTION(RECOMPILE) के उपयोग से की जा सकती है। .

मैं व्यक्तिगत रूप से OPTION(RECOMPILE) का उपयोग करता हूं इन प्रश्नों में। आप SQL Server 2008 का उपयोग करते हैं, इसलिए यह विकल्प एक अच्छा विकल्प है। यदि आप डायनेमिक SQL रूट से गुजरते हैं, तो उनका एक और लेख पढ़ना सुनिश्चित करें The Curse and Blessings of Dynamic एसक्यूएल

तो, आपकी प्रक्रिया कुछ इस तरह बन जाती है:

create procedure proc1
    @var1 varchar(100) = null,
    @var2 varchar(100) = null,
    @var3 varchar(100) = null,
    @var4 varchar(100) = null,
    ........   
    @var10 varchar(100) = null
as
begin
    insert into #a
    select * from
    (
        select * 
        from
            tab1 as a
            inner join tab2 as b on a.rollnumber = b.rollnumber
            inner join tab3 as c on c.city = b.city
            ........
            inner join tab10 as j on J.id = i.id
        where 
            (a.id = @var1 OR @var1 IS NULL)
            and (b.id = @var2 OR @var2 IS NULL)
            and (c.id = @var3 OR @var3 IS NULL)
            ...........
            and (J.id = @var10 OR @var10 IS NULL)
    ) as abc
    OPTION(RECOMPILE);

    if (select count(*) from #a) < 10 
    begin
        select * from #a
    end
    else 
    begin
        print 'Cannot display the records as count is more than 10'
    end
end

वैसे, यह स्पष्ट नहीं है कि आप count() . की जांच करके क्या हासिल करने की कोशिश कर रहे हैं , लेकिन हो सकता है कि आपको केवल सरल TOP(10) . की आवश्यकता हो अधिकतम 10 पहली पंक्तियों पर लौटने के लिए। ORDER BY . जोड़ना सुनिश्चित करें यदि आप TOP . का उपयोग करते हैं तो क्लॉज लगातार परिणाम वापस करने के लिए। यदि आप नहीं जानते हैं, तो आपके पास लौटने के लिए पंक्तियों की अधिकतम संख्या को इंगित करने और TOP(@ParamMaxRowCount) में इसका उपयोग करने के लिए आपकी प्रक्रिया का एक और पैरामीटर हो सकता है। . संग्रहीत कार्यविधि का होना आम बात नहीं है जो कभी-कभी परिणाम सेट लौटाती है और कभी-कभी केवल एक संदेश प्रिंट करती है।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. क्या SQL सर्वर के बिना .mdf डेटाबेस को एक्सेस करना संभव है?

  2. SQL:बहुभुजों का संघ

  3. एक अजीब त्रुटि प्राप्त करना, SQL सर्वर क्वेरी `विथ` क्लॉज का उपयोग कर

  4. दो तिथियों के बीच सभी तिथियों को कैसे सूचीबद्ध करें

  5. पहली पंक्ति में कैसे जुड़ें