MS SQL在表中查找多个列

时间:2015-08-13 14:21:51

标签: sql-server sql-server-2012

通常,我使用此代码在表格中找到一列:

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次的情况下解决这个问题?这只是导入新列后要做的快速错误检查。我想做的另一件事就是只有在找不到列时才打印出结果。

谢谢!

马特

1 个答案:

答案 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更多。