Мартин определено беше налучкал нещо. Нещата вътре в IF
се обработва от анализатора по време на анализ и игнорира дали вашият IF
ще излезе. Това е същата причина, поради която не можете да правите:
IF 1 = 1
CREATE TABLE #x(a INT);
ELSE
CREATE TABLE #x(b INT);
Едно заобиколно решение би било използването на динамичен SQL:
IF EXISTS ...
BEGIN
BEGIN TRANSACTION;
DECLARE @sql NVARCHAR(MAX);
SET @sql = N'
DELETE FROM [dbo].[Notes]
WHERE [EntityId] IS NULL
AND [EntityType] IS NULL
--Delete notes where the corresponding contact or account has been deleted.
OR [ID] IN (9788, 10684, 10393, 10718, 10719)
--Populate new columns with all existing data
UPDATE [dbo].[Notes]
SET [AccountId] = [EntityId]
WHERE [EntityType] = 1
UPDATE [dbo].[Notes]
SET [ContactId] = [EntityId]
WHERE [EntityType] = 2
--Delete EntityId and EntityType columns from the Notes table
ALTER TABLE [dbo].[Notes]
DROP COLUMN [EntityId], [EntityType]';
EXEC sp_executesql @sql;
COMMIT TRANSACTION;
END
Но все пак трябва да сте сигурни, че и двете колони има.