我正在尝试更改一个表以添加三个新列,但我想在添加之前检查列名称是否已经存在,只是跳过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
但必须为每列完成此操作 有更好的方法来实现这一目标吗?
答案 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