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