我有这个脚本
ALTER TABLE [dbo].TableName ADD ColumnName BIT DEFAULT(1)
GO
UPDATE [dbo].TableName SET ColumnName = 1
我必须添加条件以检查是否已存在该列,但是go
出现错误
此脚本也不起作用
IF EXISTS(SELECT 1 FROM sys.columns
WHERE Name = N'ColumnName'
AND Object_ID = Object_ID(N'dbo.TableName'))
BEGIN
ALTER TABLE [dbo].TableName ADD ColumnName BIT DEFAULT(1)
UPDATE [dbo].TableName SET ColumnName = 1
END
必须有IF
个条件。该如何解决?
答案 0 :(得分:1)
您的IF EXISTS
应该是IF NOT EXISTS
。更重要的是,您需要分别执行ALTER
和UPDATE
,如下所示:
IF NOT EXISTS(SELECT 1 FROM sys.columns
WHERE Name = N'ColumnName'
AND Object_ID = Object_ID(N'dbo.TableName'))
BEGIN
EXEC sys.sp_executesql N'ALTER TABLE [dbo].TableName ADD ColumnName BIT DEFAULT(1)';
EXEC sys.sp_executesql N'UPDATE [dbo].TableName SET ColumnName = 1';
END
答案 1 :(得分:0)
您应该使用IF NOT EXISTS
进行检查,发现您缺少NOT
。
我希望您希望UPDATE
语句之外的列IF
,因为它不会在具有相同默认值的新列上执行任何操作。
Go
语句用于将一个请求拆分为多个较小的请求。这就是为什么您不能在IF
语句中拆分的原因。
IF NOT EXISTS(SELECT 1 FROM sys.columns
WHERE Name = N'ColumnName'
AND Object_ID = Object_ID(N'dbo.TableName'))
BEGIN
ALTER TABLE [dbo].TableName ADD ColumnName BIT DEFAULT(1)
END
GO
UPDATE [dbo].TableName SET ColumnName = 1