通常,我使用以下代码在表中查找列:
Use MyDatabase
Go
IF EXISTS(SELECT * FROM sys.columns
WHERE Name in ( N'String1')
AND Object_ID = Object_ID(N'dbo.Table1'))
BEGIN
Print 'Column String1 exists in Table1'
END
ELSE
BEGIN
Print 'Column String1 does not exist in Table1'
END;
我们正在更新表格并添加56个新列。如何在不重复执行56次代码的情况下解决该问题?导入新列后,这只是一个快速的错误检查。我想做的另一件事是仅在未找到该列的情况下才打印结果。
谢谢!
马特
您可以声明一个包含所有要检查的56个列名的表,然后将其与管理视图保持联接:
DECLARE @cols TABLE
(
column_name varchar(500)
)
INSERT INTO @cols
VALUES ('col1'),('col2'),('col3')
IF EXISTS (SELECT *
FROM @cols c
LEFT JOIN INFORMATION_SCHEMA.COLUMNS col ON col.COLUMN_NAME = c.column_name
AND col.TABLE_NAME = 'Table1'
WHERE col.TABLE_NAME IS NULL)
BEGIN
PRINT 'Some columns are missing'
SELECT c.column_name
FROM @cols c
LEFT JOIN INFORMATION_SCHEMA.COLUMNS col ON col.COLUMN_NAME = c.column_name
AND col.TABLE_NAME = 'Table1'
WHERE col.TABLE_NAME IS NULL
END
INFORMATION_SCHEMA.COLUMNS
在功能上与相同sys.columns
。我更喜欢它,因为它更清洁,并且比拥有更多信息sys.columns
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句