{SERVERNAME} प्लेसहोल्डर्स के साथ पूरी स्क्रिप्ट को टेम्प्लेट स्ट्रिंग में रखें। फिर स्ट्रिंग का उपयोग करके संपादित करें:
SET @SQL_SCRIPT = REPLACE(@TEMPLATE, '{SERVERNAME}', @DBNAME)
और फिर इसे
. के साथ चलाएंEXECUTE (@SQL_SCRIPT)
यह विश्वास करना कठिन है कि, तीन वर्षों के दौरान, किसी ने ध्यान नहीं दिया कि मेरा कोड काम नहीं करता !
आप EXEC
नहीं कर सकते एकाधिक बैच। GO
एक बैच विभाजक है, टी-एसक्यूएल कथन नहीं। तीन अलग-अलग तार बनाना आवश्यक है, और फिर EXEC
प्रतिस्थापन के बाद प्रत्येक।
मुझे लगता है कि कोई एकल टेम्पलेट स्ट्रिंग को GO
पर विभाजित करके कई पंक्तियों में तोड़कर कुछ "चालाक" कर सकता है; मैंने इसे ADO.NET कोड में किया है।
और मुझे "SERVERNAME" शब्द कहाँ से मिला?
यहां कुछ कोड दिया गया है जिसका मैंने अभी परीक्षण किया है (और जो काम करता है):
DECLARE @DBNAME VARCHAR(255)
SET @DBNAME = 'TestDB'
DECLARE @CREATE_TEMPLATE VARCHAR(MAX)
DECLARE @COMPAT_TEMPLATE VARCHAR(MAX)
DECLARE @RECOVERY_TEMPLATE VARCHAR(MAX)
SET @CREATE_TEMPLATE = 'CREATE DATABASE {DBNAME}'
SET @COMPAT_TEMPLATE='ALTER DATABASE {DBNAME} SET COMPATIBILITY_LEVEL = 90'
SET @RECOVERY_TEMPLATE='ALTER DATABASE {DBNAME} SET RECOVERY SIMPLE'
DECLARE @SQL_SCRIPT VARCHAR(MAX)
SET @SQL_SCRIPT = REPLACE(@CREATE_TEMPLATE, '{DBNAME}', @DBNAME)
EXECUTE (@SQL_SCRIPT)
SET @SQL_SCRIPT = REPLACE(@COMPAT_TEMPLATE, '{DBNAME}', @DBNAME)
EXECUTE (@SQL_SCRIPT)
SET @SQL_SCRIPT = REPLACE(@RECOVERY_TEMPLATE, '{DBNAME}', @DBNAME)
EXECUTE (@SQL_SCRIPT)