0

SQLクエリに非常に奇妙な問題があります。

IF NOT EXISTS ([special query here])
    BEGIN
        SELECT 1;
    END
ELSE
    BEGIN
        SELECT 2;
    END

上記のクエリは次のように出力します:2。

SELECT 1;ただし、パーツをテーブルの作成などを含む大きなクエリに置き換えると、複数のエラーがスローされます。IFSQL Serverがステートメントのケース内でコードを実行し、そのケースが真でない場合はどうすればよいですか?

4

2 に答える 2

0

スキーマを変更する場合、パーサーは実行前にすべてのエンティティが存在することを確認します。

ALTER TABLE myTable ADD aNewColumn INT 

UPDATE myTable SET aNewColumn = 0

これにより、エラーが発生します。

クライアントからパラメーターを取り込まない限り、動的 SQL を使用できます。

EXEC sp_executesql N'UPDATE myTable SET aNewColumn = 0'
于 2013-03-07T14:41:25.910 に答える
0

構文エラーは、実行される条件分岐または実行されない条件分岐にいるかどうかに関係なく、構文エラーです。解析は実行前に行われ、成功する必要があります。

C++ で記述された次の類似の例を考えてみましょう。

int main()
{
   if (false) {
       acbukasygdfukasygdaskuygdfas#@4r9837y214r
   }
}

プログラムの意図した意味をコンパイラが判断できないため、決して実行されないブロック内にあるにもかかわらず、その無意味な行を書くことはできません。

于 2013-03-07T14:43:45.680 に答える