2016-09-27 60 views
1

我明白創建一個連接並比較兩個表中特定列的值。在這種情況下,我只想比較兩個不同表中的列,而不是值。如何比較兩個表的列,SQL Server?

我想檢查我的新表中是否有正確數量的列,並且我新表中每列的拼寫與其他列匹配。從本質上講,一種QC方法來檢驗新表格的模式。

任何SQL查詢執行此建議的建議?

+0

你可以比較每個表的SELECT * FROM sys.columns WHERE Object_ID = Object_ID(N'tableName')'[我在這個答案上找到了查詢](http://stackoverflow.com/a/133057/1804496)。 – Zack

回答

2

您可以使用下表:

SELECT COLUMN_NAME 
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_CATALOG = SOME DB 
AND TABLE_NAME = SOME TBL 

或者您可以使用sys.columns類似。

0

您想檢查數據定義是否正確。您無法在這些表上使用數據查詢

但是,SQL Server將有關表中的表的信息存儲在其他表中的數據庫中。請參閱:https://msdn.microsoft.com/en-us/library/ms186778.aspx

在這種情況下,您可能會在INFORMATION_SCHEMA.COLUMNS表上使用查詢獲取所需內容。

0
;WITH cteTable1Columns AS (
    SELECT 
     c.object_id 
     ,c.name 
    FROM 
     sys.columns c 
    WHERE 
     c.object_id = object_id('A') 
) 

, cteTable2Columns AS (
    SELECT 
     c.object_id 
     ,c.name 
    FROM 
     sys.columns c 
    WHERE 
     c.object_id = object_id('B') 
) 

SELECT 
    OBJECT_NAME(c1.object_id) as Table1Name 
    ,c1.name as Table1ColName 
    ,OBJECT_NAME(c2.object_id) as Table2name 
    ,c2.name as Table2ColName 
FROM 
    cteTable1Columns c1 
    FULL JOIN cteTable2Columns c2 
    ON c1.name = c2.name 
WHERE 
    c1.object_id is NULL 
    OR c2.object_id IS NULL 

如果使用這樣的方法來確定每個表中的列然後做一個完全外部連接的名稱會告訴你所有你的問題,如果有的話。 (注意,你也可以使用INFORMATION_SCHEMA.COLUMNS)