मार्टिन निश्चित रूप से कुछ पर था। 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
लेकिन आपको अब भी यकीन होना चाहिए कि दोनों कॉलम हैं।