我明白創建一個連接並比較兩個表中特定列的值。在這種情況下,我只想比較兩個不同表中的列,而不是值。如何比較兩個表的列,SQL Server?
我想檢查我的新表中是否有正確數量的列,並且我新表中每列的拼寫與其他列匹配。從本質上講,一種QC方法來檢驗新表格的模式。
任何SQL查詢執行此建議的建議?
我明白創建一個連接並比較兩個表中特定列的值。在這種情況下,我只想比較兩個不同表中的列,而不是值。如何比較兩個表的列,SQL Server?
我想檢查我的新表中是否有正確數量的列,並且我新表中每列的拼寫與其他列匹配。從本質上講,一種QC方法來檢驗新表格的模式。
任何SQL查詢執行此建議的建議?
您可以使用下表:
SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_CATALOG = SOME DB
AND TABLE_NAME = SOME TBL
或者您可以使用sys.columns
類似。
您想檢查數據定義是否正確。您無法在這些表上使用數據查詢。
但是,SQL Server將有關表中的表的信息存儲在其他表中的數據庫中。請參閱:https://msdn.microsoft.com/en-us/library/ms186778.aspx
在這種情況下,您可能會在INFORMATION_SCHEMA.COLUMNS
表上使用查詢獲取所需內容。
;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)
你可以比較每個表的SELECT * FROM sys.columns WHERE Object_ID = Object_ID(N'tableName')'[我在這個答案上找到了查詢](http://stackoverflow.com/a/133057/1804496)。 – Zack