スクリプト全体を、{SERVERNAME}プレースホルダーを使用してテンプレート文字列に配置します。次に、次を使用して文字列を編集します:
SET @SQL_SCRIPT = REPLACE(@TEMPLATE, '{SERVERNAME}', @DBNAME)
で実行します
EXECUTE (@SQL_SCRIPT)
3年間で、私のコードが機能しないことに誰も気づかなかったとは信じがたいです。 !
EXEC
はできません 複数のバッチ。 GO
はバッチセパレータであり、T-SQLステートメントではありません。 3つの別々の文字列を作成してから、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)