sql-server – 在将列添加到SQL表之前检查列是否存在而不更改每列的表

我试图改变一个表来添加三个新列,但我想在添加之前检查列名称是否已经存在,只是跳过else添加列,

 ALTER TABLE TESTTABLE
 ADD [ABC] [int] ,
     [XYZ] [ [int] ,
     [PQR]  [int] 
GO

我有以下脚本

IF NOT EXISTS(
    SELECT *
    FROM sys.columns 
    WHERE Name      = N'ABC'
      AND Object_ID = Object_ID(N'TESTTABLE'))
BEGIN
    ALTER TABLE TESTTABLE
    ADD [ABC] int
END

但必须为每一列完成此操作
有没有更好的方法来实现这一目标?

最佳答案
如果您确定这些列将始终并且只能同时添加在一起,则可以使用IN检查是否存在,然后将它们全部添加(如果不存在):

IF NOT EXISTS(
    SELECT *
    FROM sys.columns 
    WHERE Name IN (N'ABC',N'XYZ',N'PQR')
      AND Object_ID = Object_ID(N'TESTTABLE'))
BEGIN
    ALTER TABLE TESTTABLE
    ADD [ABC] int,
        [XYZ] int,
        [PQR] int
END

请注意,如果您的任何一个列已存在,则不会执行此操作.如果有可能发生这种情况,您需要单独进行每次检查,就像您已经在做的那样.

转载注明原文:sql-server – 在将列添加到SQL表之前检查列是否存在而不更改每列的表 - 代码日志