sql - 複数 - union all




SQLはif文の中だけを投げる (2)

私はいくつかのバリデーションをいくつかのストアドプロシージャに追加しており、変数のいくつかがヌルでないかどうかをチェックする必要があります(ストアドプロシージャの初期に設定されています)。

私は以下のようなif文の中に "throw"を追加しようとしています:

IF (@val is null)
BEGIN
    THROW 50001, 'Custom text', 1
END

これは、スローの前にifステートメント内の他のコードを探しているので、 "throw"に構文エラーが発生しますが、ifステートメント内でthrowを実行する必要があります。

できるだけ速く実行するために、ストアドプロシージャをできるだけ軽く保つ必要があります。

誰にもアイデアはありますか?


これがSQL Serverの場合、intellisense構文ハイライターはそれを気にしませんが、コードはコンパイルして正常に動作するはずです。 もちろん、1つのステートメントであれば、 BEGIN ... ENDブロックはまったく必要ありません。

IF (@val is null) THROW 50001, 'Custom text', 1

前のステートメントが終了していないため、構文エラーが表示されます。 他の答えはうまくいきますが、このようにするには、THROWの直前にセミコロンをスローするか、セミコロンですべてのステートメントを終了する習慣を取ることができます。

IF (@val is null)
BEGIN
    ;THROW 50001, 'Custom text', 1
END

または

IF (@val is null)
BEGIN;
    THROW 50001, 'Custom text', 1;
END;

あなたは気づいたかもしれません:

IF (@val is null)
    THROW 50001, 'Custom text', 1

...これも機能します。これは、SQL文の後に来る次のことは常に新しいT-SQL文であることをSQL Serverが認識しているためです。

Microsoftは、将来のT-SQL言語では、各ステートメントの後にセミコロンが必要であると述べていることに気づく価値があるので、私の推薦は今、習慣を構築することです。





throw