如何添加列(如果不存在)和更新值

时间:2019-09-06 09:28:31

标签: sql tsql

我有这个脚本

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个条件。该如何解决?

2 个答案:

答案 0 :(得分:1)

您的IF EXISTS应该是IF NOT EXISTS。更重要的是,您需要分别执行ALTERUPDATE,如下所示:

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