我正在尝试更改一个表以添加三个新列,但是我想在添加之前检查这些列的名称以及该名称是否已经存在,只是跳过其他添加列,
ALTER TABLE TESTTABLE
ADD [ABC] [int] ,
[XYZ] [ [int] ,
[PQR] [int]
GO
Run Code Online (Sandbox Code Playgroud)
我有以下脚本
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
Run Code Online (Sandbox Code Playgroud)
但这必须针对每一列完成, 是否有更好的方法来实现?
小智 5
如果您确定这些列将始终且仅在同一时间被添加在一起,则可以使用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
Run Code Online (Sandbox Code Playgroud)
请注意,如果您的任一列已存在,则此操作将不会执行。如果有这种可能,您需要像已经做的那样分别进行每项检查。
简单又肮脏,您可以直接在条件中使用列名COL_LENGTH(如果列不存在则返回NULL,即“错误”):
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8768 次 |
| 最近记录: |