SQL Server parser sætningen og validerer den og ignorerer eventuelle betingelser. Derfor fejler følgende også:
IF 1 = 1
BEGIN
CREATE TABLE #foo(id INT);
END
ELSE
BEGIN
CREATE TABLE #foo(id INT);
END
Uanset om du trykker på Execute eller bare Parse, resulterer dette i:
SQL Server ved ikke eller er ligeglad med, hvilken gren af en betinget der skal indtastes; det validerer alligevel alle udsagn i en batch. Du kan gøre ting som (på grund af udskudt navneopløsning):
IF <something>
BEGIN
SELECT foo FROM dbo.Table_That_Does_Not_Exist;
END
Men du kan ikke:
IF <something>
BEGIN
SELECT column_that_does_not_exist FROM dbo.Table_That_Does;
END
Løsningen er typisk at bruge dynamisk 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