2010-03-20 15 views
6

मैं इस प्रक्रिया को कॉल करना चाहता हूं जो एक मान भेजता है जो पूर्ण या कोई भी मूल्य हो सकता है।एसईटी ANSI_NULLS चालू या बंद के साथ कैसे निपटें?

SELECT DomainName, DomainCode FROM Tags.tblDomain WHERE SubDomainId [email protected] 

मैं बस नीचे दिए गए कोड में जो कर रहा हूं उसके बजाय मैं इस एकल क्वेरी का उपयोग करना चाहता हूं।

मैंने यह खोजा कि मैं यह कैसे कर सकता हूं तो मुझे this Link मिला।

इस मैं ANSI_NULLS बंद

सेट करने के लिए के अनुसार मैं अपने एसक्यूएल क्वेरी निष्पादित करने से पहले इस प्रक्रिया के अंदर सेट किया और ऐसा करने के बाद इसे फिर से रीसेट करने में सक्षम नहीं हूँ।

ALTER PROCEDURE [Tags].[spOnlineTest_SubDomainSelect] 
    @SubDomainId INT 
AS 
BEGIN 
    -- SET NOCOUNT ON added to prevent extra result sets from 
    -- interfering with SELECT statements. 
    SET NOCOUNT ON; 
    -- Insert statements for procedure here 
    IF @SubDomainId IS NULL 
     SELECT DomainName, DomainCode FROM Tags.tblDomain WHERE SubDomainId IS NULL 
    ELSE 
     SELECT DomainName, DomainCode FROM Tags.tblDomain WHERE SubDomainId [email protected] 
END 

क्या ANSI_NULLS के साथ सौदा या का उपयोग करते हुए, तो वरना

उत्तर

8

सेट ANSI_NULLS ony proc बनाने संग्रहीत समय में परिभाषित किया गया है और रन टाइम पर सेट नहीं किया जा सकता है।

From CREATE PROC

विकल्प सेट करें

डेटाबेस इंजन का उपयोग करना सेटिंग्स दोनों सेट QUOTED_IDENTIFIER की बचत होती है और ANSI_NULLS सेट जब कोई Transact SQL संग्रहीत प्रक्रिया बनाया या संशोधित किया गया है। ये मूल सेटिंग्स तब उपयोग की जाती हैं जब संग्रहीत प्रक्रिया निष्पादित की जाती है। इसलिए, किसी भी क्लाइंट सत्र सेटिंग्स SET QUOTED_IDENTIFIER और SET ANSI_NULLS को संग्रहीत किया जाता है जब संग्रहीत प्रक्रिया चल रही है। अन्य सेट विकल्प, जैसे एसईटी एरिथबॉर्ट, सेट ANSI_WARNINGS, या SET ANSI_PADDINGS सहेजे गए नहीं हैं जब संग्रहित प्रक्रिया बनाई या संशोधित की जाती है। यदि संग्रहित प्रक्रिया का तर्क विशेष सेटिंग पर निर्भर करता है, तो उपयुक्त सेटिंग की गारंटी के लिए प्रक्रिया की शुरुआत में एक SET कथन शामिल करें। जब एक एसईटी कथन संग्रहीत प्रक्रिया से निष्पादित होता है, तो सेटिंग केवल तक प्रभावी होती है, संग्रहीत प्रक्रिया चल रही है।सेटिंग को को संग्रहीत प्रक्रिया के के मूल्य पर बहाल करने के बाद पुनर्स्थापित किया जाता है। यह व्यक्तिगत क्लाइंट को विकल्प सेट करने के लिए सक्षम करता है, जो संग्रहीत प्रक्रिया के तर्क को प्रभावित किए बिना चाहते हैं।

ही इस मामले में SET QUOTED_IDENTIFIER

पर लागू होता है, यदि किसी और का उपयोग करें क्योंकि SET ANSI_NULLS भविष्य में पर हो जाएगा।

या पीटर लैंग का सुझाव। , समाधान के लिए THX इस समय मैं उर समाधान से कसरत करेंगे:

ईमानदारी से कहूं तो काम करने के लिए SubDomainId = @SubDomainId उम्मीद जब @SubDomainId शून्य है शून्य की वास्तव में सही उपयोग नहीं है ...

+0

@ जीबीएन thx। –

2

आप एक ही क्वेरी का उपयोग नहीं कर सकते करने के लिए बेहतर अभ्यास हो जाएगा?

SELECT DomainName, DomainCode 
FROM Tags.tblDomain 
WHERE (@SubDomainId IS NULL AND SubDomainId IS NULL) 
    OR (SubDomainId = @SubDomainId) 
+0

@Peter लैंग। लेकिन ANSI_NULLS के लिए प्रश्न अभी भी खुला है। –

0

FYI करें, मैं बहुत यकीन है ... जब आप/संपादित बनाने यह

ANSI_NULLS OFF 

प्रक्रिया पर लागू होता है, यह प्रक्रिया का एक सेटिंग की तरह है।

तो या तो प्रक्रिया चालू या बंद है। आपका उदाहरण एक प्रश्न नहीं था, इसलिए मैं थोड़ा उलझन में हूं।

लेकिन यदि आपके पास SQL ​​2005/2008 है उदाहरण के लिए यदि आप "संपादन" प्रक्रिया करते हैं तो यह एक नई टैब में आपकी प्रक्रिया को खोलता है, आपको शीर्ष के पास ANSI_NULLS OFF दिखाई देगा।

आप इसे वहाँ संपादित कर सकते हैं और यह चालू या बंद पर सेट और इसे बदलने के लिए अद्यतन ...

+0

नोट, आप उस सेटिंग को एक प्रश्न में भी उपयोग कर सकते हैं ... मैं बस यह कह रहा हूं कि यह प्रक्रिया के साथ कैसे काम करता है। –

+0

मैं इसे क्वेरी के साथ प्रयोग करने की कोशिश कर रहा हूं। मैं प्रक्रिया के लिए ठीक काम कर रहा हूं यानी अगर मैं प्रक्रिया पर इसे बंद करता हूं। लेकिन मैं केवल क्वेरी के लिए इसे बंद करना चाहता हूं। कोई उपाय ? बहुत अच्छा स्पष्टीकरण प्रदान करने के लिए –

संबंधित मुद्दे