Masukkan seluruh skrip ke dalam string templat, dengan placeholder {SERVERNAME}. Kemudian edit string menggunakan:
SET @SQL_SCRIPT = REPLACE(@TEMPLATE, '{SERVERNAME}', @DBNAME)
lalu jalankan dengan
EXECUTE (@SQL_SCRIPT)
Sulit dipercaya bahwa, selama tiga tahun, tidak ada yang memperhatikan bahwa kode saya tidak berfungsi !
Anda tidak dapat EXEC
beberapa batch. GO
adalah pemisah batch, bukan pernyataan T-SQL. Penting untuk membuat tiga string terpisah, lalu ke EXEC
masing-masing setelah substitusi.
Saya kira seseorang dapat melakukan sesuatu yang "pintar" dengan memecah string templat tunggal menjadi beberapa baris dengan membelah GO
; Saya telah melakukannya dalam kode ADO.NET.
Dan dari mana saya mendapatkan kata "SERVERNAME"?
Berikut beberapa kode yang baru saja saya uji (dan yang berfungsi):
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)