SQL Server analyzuje příkaz a ověřuje jej, přičemž ignoruje všechny podmínky if. To je důvod, proč se nezdaří ani následující:
IF 1 = 1
BEGIN
CREATE TABLE #foo(id INT);
END
ELSE
BEGIN
CREATE TABLE #foo(id INT);
END
Ať už stisknete Execute nebo jen Parse, výsledkem je:
SQL Server neví nebo se nestará o to, která větev podmínky bude zadána; stejně ověří všechny příkazy v dávce. Můžete dělat věci jako (kvůli odloženému rozlišení názvů):
IF <something>
BEGIN
SELECT foo FROM dbo.Table_That_Does_Not_Exist;
END
Ale nemůžete:
IF <something>
BEGIN
SELECT column_that_does_not_exist FROM dbo.Table_That_Does;
END
Řešením je obvykle použití dynamického 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