如何比较不同数据库中不同表的两列?
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_1
和Table_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')
【讨论】:
以上是关于如何比较不同数据库中不同表的两列?的主要内容,如果未能解决你的问题,请参考以下文章