SQL सर्वर कथन को पार्स करता है और किसी भी सशर्त को अनदेखा करते हुए इसे मान्य करता है। यही कारण है कि निम्नलिखित भी विफल रहता है:
IF 1 = 1
BEGIN
CREATE TABLE #foo(id INT);
END
ELSE
BEGIN
CREATE TABLE #foo(id INT);
END
चाहे आप निष्पादित करें या केवल पार्स करें, इसका परिणाम है:
SQL सर्वर नहीं जानता या परवाह नहीं करता है कि सशर्त की कौन सी शाखा दर्ज की जाएगी; यह वैसे भी एक बैच में सभी बयानों को मान्य करता है। आप (आस्थगित नाम समाधान के कारण) जैसे काम कर सकते हैं:
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