通常,我使用此代码在表格中找到一列:
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次的情况下解决这个问题?这只是导入新列后要做的快速错误检查。我想做的另一件事就是只有在找不到列时才打印出结果。
谢谢!
马特
答案 0 :(得分:1)
您可以声明一个包含您要检查的所有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
更多。