【发布时间】: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,这意味着您的代码看起来不像在对您大喊大叫。
标签: sql-server metadata information-schema