SQL Server mem-parsing pernyataan dan memvalidasinya, mengabaikan persyaratan if apa pun. Inilah sebabnya mengapa yang berikut ini juga gagal:
IF 1 = 1
BEGIN
CREATE TABLE #foo(id INT);
END
ELSE
BEGIN
CREATE TABLE #foo(id INT);
END
Apakah Anda menekan Execute atau hanya Parse, ini menghasilkan:
SQL Server tidak tahu atau peduli cabang kondisional mana yang akan dimasukkan; itu memvalidasi semua pernyataan dalam satu batch. Anda dapat melakukan hal-hal seperti (karena resolusi nama yang ditangguhkan):
IF <something>
BEGIN
SELECT foo FROM dbo.Table_That_Does_Not_Exist;
END
Tapi kamu tidak bisa:
IF <something>
BEGIN
SELECT column_that_does_not_exist FROM dbo.Table_That_Does;
END
Solusinya, biasanya, adalah dengan menggunakan SQL dinamis:
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