मैं कई डेवलपमेंट डेटाबेस से स्टेजिंग / प्रोडक्शन में स्वचालित रूप से परिवर्तन के लिए एक स्क्रिप्ट उत्पन्न कर रहा हूँ। मूल रूप से, यह परिवर्तन-लिपियों का एक समूह लेता है, और उन्हें एक स्क्रिप्ट में विलय करता है, प्रत्येक स्क्रिप्ट को एक IF whatever BEGIN ... END
बयान में लपेटता है ।
हालाँकि, कुछ लिपियों के लिए एक GO
कथन की आवश्यकता होती है, उदाहरण के लिए, SQL पार्सर के बनने के बाद एक नए कॉलम के बारे में जानता है।
ALTER TABLE dbo.EMPLOYEE
ADD COLUMN EMP_IS_ADMIN BIT NOT NULL
GO -- Necessary, or next line will generate "Unknown column: EMP_IS_ADMIN"
UPDATE dbo.EMPLOYEE SET EMP_IS_ADMIN = whatever
हालांकि, एक बार मैं इसे एक IF
ब्लॉक में लपेटता हूं :
IF whatever
BEGIN
ALTER TABLE dbo.EMPLOYEE ADD COLUMN EMP_IS_ADMIN BIT NOT NULL
GO
UPDATE dbo.EMPLOYEE SET EMP_IS_ADMIN = whatever
END
यह विफल रहता है क्योंकि मैं BEGIN
बिना मेल के साथ भेज रहा हूं END
। हालाँकि, यदि मैं GO
इसे हटाता हूँ तो यह एक अज्ञात कॉलम के बारे में फिर से शिकायत करता है।
क्या एक ही IF
ब्लॉक के भीतर एक ही कॉलम बनाने और अपडेट करने का कोई तरीका है ?
GO
है कि अपने आप एक लाइन में होना चाहिए, इसलिए आप केवल उस मामले को खोज सकते हैं, और शब्द के प्रत्येक उदाहरण को नहीं GO
। 2) आप हमेशा लॉग कर सकते हैं कि कौन से कथन सफलतापूर्वक पूर्ण हुए। या आप पूरी चीज़ को एक कोशिश / कैच में लपेट सकते हैं और कुछ लाइन का उपयोग करके अपने स्वयं के लाइन नंबरों का उपयोग कर सकते हैं, जैसे @lineNo, जिसे आप ट्रैक करते हैं, और त्रुटि पर रिपोर्ट करते हैं। चूंकि आप ये स्वचालित रूप से उत्पन्न कर रहे हैं, इसलिए इस तरह के बदलाव करना एक हवा होना चाहिए। ऐसा लगता है कि जैसे आपको लगता है कि आप इस मार्ग का पता नहीं लगाना चाहते हैं, जब मुझे लगता है कि आपकी सभी चिंताओं के लिए समाधान ढूंढे जाने हैं।