Martin chắc chắn đã có một cái gì đó. Nội dung bên trong IF
đang được trình phân tích cú pháp xử lý tại thời điểm phân tích cú pháp và bỏ qua liệu IF
của bạn sẽ lia ra. Đây cũng là lý do bạn không thể làm:
IF 1 = 1
CREATE TABLE #x(a INT);
ELSE
CREATE TABLE #x(b INT);
Một cách giải quyết là sử dụng SQL động:
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
Nhưng bạn vẫn nên chắc chắn rằng cả hai cột ở đó.