コメントにあるように、 GO
を入れることはできません 次の理由により、相互に依存している SQL ステートメントのグループの途中にある:
GO
コンパイルされた 1 つのバッチの終わりと次のバッチの始まりを示します。ほとんどのステートメント コンテキスト (IF..ELSE
など) ) GO
にまたがることはできません .そして、
GO
SQL ステートメントでさえありません。これは Management Studio/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
の後に物事を「二重ラップ」する必要があるため、もちろん非常に厄介です。 コマンド。
また、この二重ラップのため、内部の文字列は 4 重引用符で囲む必要があることに注意してください。