如何比较两个表的列,SQL Server?

时间:2016-09-27 16:11:05

标签: sql-server

我理解创建连接并比较两个表中特定列的值。在这种情况下,我只想比较两个不同表之间的列,而不是值。

我想检查一下我新表中的列数是否正确,以及新表中每列的拼写是否与另一列匹配。基本上,这是一种QC新表格模式的方法。

有关SQL查询执行此操作的建议吗?

3 个答案:

答案 0 :(得分:2)

您可以使用下表:

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

或者您也可以类似地使用sys.columns

答案 1 :(得分:0)

您想要检查数据定义是否正确。您无法在这些表格上使用数据查询

但是,SQL Server将有关表中的表的信息存储在其他表中。请参阅:https://msdn.microsoft.com/en-us/library/ms186778.aspx

在这种情况下,您可以使用INFORMATION_SCHEMA.COLUMNS表格上的查询获得所需内容。

答案 2 :(得分: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)