私は同じ問題を抱えています。醜い-しかし便利な-GOTOのセットでそれを克服しました。
私が何よりもまず「スクリプトランナー」と呼ぶ理由は、実際のスクリプトを操作したいだけの開発者からは、複雑さと醜いアプローチを隠したいからです。同時に、スクリプトが2つの(3つ以上に拡張可能な)データベースでまったく同じ方法で実行されることを確認できます。
GOTO ScriptRunner
ScriptExecutes:
--------------------ACTUAL SCRIPT--------------------
-------- Will be executed in DB1 and in DB2 ---------
--TODO: Your script right here
------------------ACTUAL SCRIPT ENDS-----------------
GOTO ScriptReturns
ScriptRunner:
USE DB1
GOTO ScriptExecutes
ScriptReturns:
IF (db_name() = 'DB1')
BEGIN
USE DB2
GOTO ScriptExecutes
END
このアプローチを使用すると、変数を保持することができ、DECLAREステートメントを2回実行しても、SQLServerが異常終了することはありません。