【问题标题】: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,这意味着您的代码看起来不像在对您大喊大叫。

标签: sql-server metadata information-schema


【解决方案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')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-28
    • 1970-01-01
    • 2016-02-12
    • 1970-01-01
    • 2013-07-20
    相关资源
    最近更新 更多