これが私のやり方です:
PRINT 'This runs'
go
SELECT 0/0, 'This causes an error'
go
if (@@error <> 0)
Begin
set nocount on
set noexec on
End
GO
PRINT 'This should not run'
go
set noexec off
set nocount off
GO
「noexec」モードでは、SSMS は T-SQL をコンパイルするだけで、実際には実行しない状態になります。これは、[実行] (F5) ではなく [解析] ツールバー ボタン (Ctrl+F5) を誤って押した場合と似ています。
スクリプトの最後で noexec をオフにすることを忘れないでください。そうしないと、ユーザーは永続的な「コマンドが正常に完了しました」と混乱することになります。メッセージ。
TRY CATCH ブロックを使用する代わりに、後続のバッチで @@error に対するチェックを使用します。次のバッチで @@error を使用すると、「テーブルが存在しません」などのコンパイル エラーが検出されます。
noexec モードに加えて、nocount モードもトグルします。 noexec モードがオンで nocount がオフの場合でも、クエリは「(0 行が影響を受けています)」というメッセージを報告します。 noexec モードであるため、メッセージは常にゼロ行を報告します。ただし、nocount をオンにすると、これらのメッセージが抑制されます。
また、SQL Server 2005 を実行している場合、スキップするコマンドが存在しないテーブルを参照している場合、コマンドがバッチ内の最初のコマンドである場合、エラー メッセージが表示される可能性があることに注意してください。偽の Print ステートメントを使用してコマンドをバッチの 2 番目のコマンドに強制すると、これを抑制することができます。 MS バグ #569263 詳細はこちら