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

时间:2016-07-15 16:08:40

标签: sql-server

我正在尝试更改一个表以添加三个新列,但我想在添加之前检查列名称是否已经存在,只是跳过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

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

2 个答案:

答案 0 :(得分:4)

如果您确定这些列将始终只在同一时间添加,您可以使用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

请注意,如果您的任何一个列已存在,则不会执行此操作。如果有可能发生这种情况,您需要按照自己的要求单独进行每次检查。

答案 1 :(得分:2)

简单而肮脏,您可以直接使用COL_LENGTH条件中的列名称(如果列不存在则返回NULL,即&#34;出错&#34;):< / p>

DECLARE @tb varchar(30) = 'TESTTABLE'
IF  COL_LENGTH(@tb, 'ABC') IS NULL
AND COL_LENGTH(@tb, 'XYZ') IS NULL
AND COL_LENGTH(@tb, 'PQR') IS NULL
BEGIN
    ALTER TABLE TESTTABLE
    ADD [ABC] int, [XYZ] int, [PQR] int
END