【发布时间】:2020-02-12 04:19:24
【问题描述】:
IF NOT EXISTS(SELECT 1 FROM sys.columns
WHERE Name = N'MyColumn' AND Object_ID = Object_ID(N'[MySchema].[MyTable]'))
ALTER TABLE [MySchema].[MyTable]
ADD [MyColumn] VARCHAR(10) NULL
GO
UPDATE [MySchema].[MyTable]
SET [MyColumn] = 'ValueForExistingData'
WHERE [MyColumn] IS NULL
ALTER TABLE [MySchema].[MyTable]
ALTER COLUMN [MyColumn] VARCHAR(10) NOT NULL
需要什么样的锁定/事务隔离级别来确保不会在UPDATE 和ALTER COLUMN 语句之间插入新行?这是为了防止ALTER COLUMN 语句由于新插入行中MyColumn 中的NULL 值而失败。
是否有更好的替代 GO 以确保 ADD [MyColumn] 在 SET [MyColumn] 之前完成?
【问题讨论】:
-
将 try catch 与 go to 和 label 语句一起使用
标签: sql sql-server