マーティンは間違いなく何かに夢中でした。 IF
の中のもの 解析時にパーサーによって処理され、 IF
かどうかを無視します パンアウトします。これは、あなたができないのと同じ理由です:
IF 1 = 1 CREATE TABLE #x(a INT); ELSE CREATE TABLE #x(b INT);
プレ>1 つの回避策は、動的 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
プレ>ただし、両方 列があります。