2011-08-18 20 views
18

मैं एक संग्रहीत प्रक्रिया है कि इस तरह आम तौर पर लग रहा है में एक अद्यतन बयान है:एसक्यूएल संग्रहित प्रक्रिया: यदि चर रिक्त नहीं है, अद्यतन बयान

Update [TABLE_NAME] 
Set [email protected] 

वहाँ एक अच्छा तरीका केवल अद्यतन बयान करता है, तो गति प्रदान करने के है परिवर्तनीय शून्य या मान -1 नहीं है?

IF NOT EXISTS...INSERT प्रश्न के समान।

आपको बहुत बहुत धन्यवाद।

उत्तर

37

उपयोग एक T-SQL IF:

IF @ABC IS NOT NULL AND @ABC != -1 
    UPDATE [TABLE_NAME] SET [email protected] 

MSDN docs पर एक नजर डालें।

+7

यह आसान हुह? खैर मैं एक इलेक्ट्रिक सॉकेट में एक कांटा चिपकने वाला हूं और अटलांटिक सिटी और अन्य समान बेवकूफ चीजों में एक पिछली गली से एक गंदे सुई स्कोर कर रहा हूं। आपके सहयोग के लिए धन्यवाद। – Jake

+1

@ जेक, कोई चिंता नहीं। हम सभी के पास हमारे दिन हैं। बीटीडब्ल्यू, स्टैक ओवरफ्लो में आपका स्वागत है! –

25

एक और दृष्टिकोण है जब आप कई अद्यतन COALESCE उपयोग करने के लिए हो जाएगा:

UPDATE [DATABASE].[dbo].[TABLE_NAME] 
SET  
    [ABC] = COALESCE(@ABC, [ABC]), 
    [ABCD] = COALESCE(@ABCD, [ABCD]) 
+5

यही वह है जो मैं अपने सिर को डेस्क में मारने की कोशिश कर रहा था। जब एक दर्जन कॉलम शामिल होता है तो "if-update" जोड़े के पूरे समूह की तुलना में बहुत अच्छा दिखता है। – Herb

+0

बस शानदार !!! बहुत बहुत धन्यवाद। –

0

फिर भी एक और दृष्टिकोण IsNull है()।

UPDATE [DATABASE].[dbo].[TABLE_NAME] 
SET  
    [ABC] = ISNULL(@ABC, [ABC]), 
    [ABCD] = ISNULL(@ABCD, [ABCD]) 

IsNull और COALESCE के बीच का अंतर वापसी प्रकार है। COALESCE भी 2 से अधिक तर्क ले सकता है, और पहले का उपयोग करें जो शून्य नहीं है। अर्थात।

select COALESCE(null, null, 1, 'two') --returns 1 
select COALESCE(null, null, null, 'two') --returns 'two' 
संबंधित मुद्दे