sql >> データベース >  >> RDS >> Sqlserver

SQL Server:Query Analyzer で一連のバッチを中止する方法は?

    これが私のやり方です:

    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 詳細はこちら



    1. SQLServerデータベースのすべてのデータを削除します

    2. MySqlCommand Prepare()がIsPreparedをtrueに設定することはありません

    3. ループせずに単一の列にレコードを連結しますか?

    4. データベースレコードに対してNULLをチェック->issetvs.is_null