2015-08-13 37 views
0

通常情况下,我用这个代码在我的表找列:MS SQL找到多个表中的列

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

56 * extra * columns:|我希望你已经有大约40列了! – Jamiec

+0

这是一个数据仓库。 –

+0

在这种情况下,继续。你远远不如你应该拥有的那么多:) – Jamiec

回答

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