2010-03-29 21 views
6

कहते हैं कि मैं उस तरह एक स्क्रिप्ट कर सकते हैं:टीएसक्यूएल स्क्रिप्ट चेक अक्षम करें?

अगर (कुछ हालत) शुरू sometable अंत

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

प्रश्न: क्या मैं इस तरह की जांच को अक्षम कर सकता हूं ताकि स्क्रिप्ट निष्पादित हो और चूंकि सत्य नहीं है, तो यह कभी नहीं देख पाएगा कि कॉलम गुम है?

धन्यवाद :-)

+0

अगर आपको कॉलम मौजूद है या नहीं, तो इस बारे में चिंता करने की ज़रूरत है कि आपके डिज़ाइन में कुछ गंभीरता से गलत है। – HLGEM

उत्तर

4

गतिशील एसक्यूएल उपयोग

if(some condition) 
begin 
    exec ('select somecolumn from sometable') --or sp_executesql 
end 

यह वास्तव में, क्योंकि जो एसक्यूएल है की इस चलाने के लिए कोई मतलब नहीं है। यह रेखा से निष्पादित लाइन नहीं है: पूरे बैच को एक बार में पार्स किया जाता है और त्रुटि उत्पन्न होती है, इससे पहले कि वास्तव में आपके अर्थ में कुछ भी चलता है। यह डिज़ाइन द्वारा है ...

+0

+1, डुह ने मुझे 44 सेकंड से हराया !!! –

+0

100% यह कोड मेरे लिए काम करता है: IF OBJECT_ID ('Reports.dbo.RecordsTable') NULL है हालांकि तालिका 1 या 2 को इंगित करने के लिए केवल सादा पैरामीटर तारों के साथ अन्य दृष्टिकोण विफल हैं। हालांकि गतिशील एसक्यूएल चाल हमेशा काम करती है, लेकिन निश्चित रूप से थोड़ा परेशान है। – regeter

2

आप ऐसी प्रक्रिया बना सकते हैं जो किसी तालिका का संदर्भ न दे जो कि मौजूद नहीं है, हालांकि यह नियम का एकमात्र अपवाद है।

आस्थगित नाम संकल्प केवल जा इस्तेमाल किया जा सकता है जब आप अस्तित्वहीन तालिका वस्तुओं संदर्भ: बोल से। संग्रहीत प्रक्रिया संग्रहीत प्रक्रिया के समय अन्य सभी ऑब्जेक्ट्स मौजूद होनी चाहिए। उदाहरण के लिए, जब आप संग्रहीत प्रक्रिया में मौजूदा तालिका का संदर्भ देते हैं तो आप उस तालिका के लिए गैर-स्तंभ कॉलम सूचीबद्ध नहीं कर सकते हैं।

गतिशील एसक्यूएल का उपयोग करने से परे, संग्रहीत प्रक्रिया में मौजूद मौजूदा कॉलम का संदर्भ देने का कोई मतलब नहीं है।

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