जैसा कि टिप्पणियों में बताया गया है, आप GO
. नहीं डाल सकते हैं SQL कथनों के समूह के बीच में जो एक दूसरे पर निर्भर हैं क्योंकि:
-
GO
एक संकलित बैच के अंत और अगले की शुरुआत को इंगित करता है। अधिकांश कथन संदर्भ (जैसेIF..ELSE
)GO
. का विस्तार नहीं कर सकता . और, -
GO
एक SQL स्टेटमेंट भी नहीं है, यह एक मैनेजमेंट स्टूडियो/SQLCMD कमांड है, इसलिए इसे कहीं और पहचाना नहीं जाएगा।
आपकी स्थिति एक सामान्य आवश्यकता है, लेकिन इसका कोई एक समाधान नहीं है। आपके द्वारा सूचीबद्ध विशिष्ट मामले के लिए, डायनेमिक SQL का उपयोग करना शायद सबसे अच्छा तरीका है:
IF EXISTS(select * from sys.databases where name='MyDB')
BEGIN
EXEC('
USE MyDB
EXEC(''
DROP USER [tester]
.
.
.
'')
')
END
ELSE
PRINT 'MyDB database is not available'
यह इस तथ्य का लाभ उठाता है कि डायनेमिक SQL एक्सक्शंस प्रत्येक GO
के लिए दोनों प्रतिस्थापन के लिए अपने स्वयं के बैच का गठन करते हैं प्रभाव (एक नया बैच शुरू करना) और USE
. के अजीबोगरीब इंटरैक्शन को अलग करना संकलक के साथ। यह निश्चित रूप से बहुत कठिन है क्योंकि USE..GO
के बाद चीजों को "डबल-रैप" करने की आवश्यकता है आदेश।
यह भी ध्यान दें कि इस डबल-रैपिंग के कारण इसके अंदर के किसी भी तार को चौगुना-उद्धृत करना होगा।