SQL Server phân tích cú pháp câu lệnh và xác thực nó, bỏ qua bất kỳ điều kiện if nào. Đây là lý do tại sao những điều sau cũng không thành công:
IF 1 = 1
BEGIN
CREATE TABLE #foo(id INT);
END
ELSE
BEGIN
CREATE TABLE #foo(id INT);
END
Cho dù bạn nhấn Thực thi hay chỉ Phân tích cú pháp, điều này dẫn đến:
SQL Server không biết hoặc không quan tâm đến nhánh nào của một điều kiện sẽ được nhập; nó vẫn xác thực tất cả các câu lệnh trong một lô. Bạn có thể làm những việc như (do giải quyết tên bị hoãn lại):
IF <something>
BEGIN
SELECT foo FROM dbo.Table_That_Does_Not_Exist;
END
Nhưng bạn không thể làm:
IF <something>
BEGIN
SELECT column_that_does_not_exist FROM dbo.Table_That_Does;
END
Cách giải quyết thường là sử dụng SQL động:
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