2016-09-27 25 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)