コメントにあるように、 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 重引用符で囲む必要があることに注意してください。