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