Martin was zeker iets op het spoor. De dingen in de IF
wordt tijdens het parseren door de parser behandeld en negeert of uw IF
uit zal komen. Dit is dezelfde reden waarom je het niet kunt doen:
IF 1 = 1
CREATE TABLE #x(a INT);
ELSE
CREATE TABLE #x(b INT);
Een oplossing zou zijn om dynamische SQL te gebruiken:
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
Maar je moet er nog steeds zeker van zijn dat beide kolommen zijn er.