如何比较不同数据库中不同表的两列?

Posted

技术标签:

【中文标题】如何比较不同数据库中不同表的两列?【英文标题】:How do I compare two columns from different tables in different databases? 【发布时间】:2021-12-16 12:12:30 【问题描述】:

假设我在 Database_1 中有 Table_1,有 25 列 并说我在Database_2 中有Table_2 19 列 我想比较Table_1Table_2 中的列并输出Table_1 中存在但Table_2 中不存在的列

我试过了

SELECT COLUMN_NAME 
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_NAME='Table_1'
EXCEPT
SELECT COLUMN_NAME 
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_NAME='Table_2'

问题是:如果我在 Database_1 中,它只会在 Table_1 中找到变量并为 Table_2 返回空列表,如果我在 Database_2 中,它只会在 Table_2 中找到变量并为 Table_1 返回空列表。如果说我在 Master 中,它会返回 Table_1 和 Table_2 的空列表。如何从一个数据库中正确定位每个表及其变量?

【问题讨论】:

用数据库名限定对象:FROM Database_1.INFORMATION_SCHEMA.COLUMNS...FROM Database_2.INFORMATION_SCHEMA.COLUMNS... 与执行任何其他跨数据库查询的方式相同,使用完全限定的对象名称。 如果没有其他原因,请使用 sys.columns,这意味着您的代码看起来不像在对您大喊大叫。 【参考方案1】:

您可以通过以 database.schema.object 的形式完全限定对象名称,从任何数据库 context 访问任何数据库对象。

使用 SQL Server 最好使用 sys 架构,它(如果性能很重要)比使用 information_schema 架构更好。

所以你可以这样做

select name
from database_1.sys.columns
where object_id=object_id(N'database_1.sys.table_1')
except
select name
from database_2.sys.columns
where object_id=object_id(N'database_2.sys.table_2')

【讨论】:

以上是关于如何比较不同数据库中不同表的两列?的主要内容,如果未能解决你的问题,请参考以下文章

比较来自两个不同表的两列的逗号分隔值

显示来自两个不同表的两列之间的差异(比较表)

验证两个不同表的两列完全匹配

如何比较pyspark中两个不同数据帧中的两列

将数据库一个表的两列数据合并且去重

将数据从一列插入另一个表的两列的过程