2015-08-13 36 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