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

条件が真でない場合でも、T-SqlはIfステートメントを評価しているように見えます

    SQL Serverはステートメントを解析して検証し、if条件を無視します。これが、以下も失敗する理由です。

    IF 1 = 1
    BEGIN
      CREATE TABLE #foo(id INT);
    END
    ELSE
    BEGIN
      CREATE TABLE #foo(id INT);
    END
    

    [実行]をクリックしても、[解析]をクリックしても、次のようになります。

    SQL Serverは、条件のどのブランチが入力されるかを認識または認識しません。とにかく、バッチ内のすべてのステートメントを検証します。 (名前解決が延期されたため)次のようなことができます:

    IF <something>
    BEGIN
      SELECT foo FROM dbo.Table_That_Does_Not_Exist;
    END
    

    しかし、あなたはできません:

    IF <something>
    BEGIN
      SELECT column_that_does_not_exist FROM dbo.Table_That_Does;
    END
    

    回避策は、通常、動的SQLを使用することです。

    IF <something>
    BEGIN
      DECLARE @sql NVARCHAR(MAX);
      SET @sql = N'SELECT column_that_does_not_exist FROM dbo.Table_That_Does;';
      EXEC sp_executesql @sql;
    END
    


    1. php:文字列データを数値データに変更する方法

    2. postgresqlに行が存在するかどうかを確認します

    3. 現在のグループに応じて、最初の日付を取得するSQLクエリ(〜コントロールブレーク)

    4. MySQLコメントに一致する正規表現