sql-server - 在将列添加到 SQL 表之前检查该列是否存在,而无需更改每列的表

标签 sql-server

我正在尝试更改表以添加三个新列,但我想在添加之前检查列名称是否存在,如果已经存在,则跳过其他添加列,

 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 表之前检查该列是否存在,而无需更改每列的表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38400677/

相关文章:

sql - order by 后跟从属 order by

SQL Server 列加密

SQL Server : add row if doesn't exist, 一列的增量值,原子

sql - 将充满逗号分隔值的 varchar 传递给 SQL Server IN 函数

sql-server - SQL Server smalldatetime 与 datetime2

sql - 如何加速对未索引表的基于组的重复计数查询

sql-server - SSRS 可以支持 Multi-Tenancy 使用吗?

mysql - 在同一个 SQL.Server 上跨 2 个数据库加入时的 COLLATE 问题

sql - 列 'ID' 被限制为唯一。值(value)已经存在

sql-server - 日期时间比较更新两列