在两个不同的数据库

时间:2016-04-27 20:11:11

标签: sql sql-server

我有两个数据库,它们都有完全相同的表名。但是,已在两个数据库之间添加和删除匹配表之间的某些列。我试图弄清楚如何编写一个只能在第一个数据库中返回列的查询,而只在第二个数据库中返回列。

我一直在使用INFORMATION_SCHEMA.TABLES和INFORMATION_SCHEMA.COLUMNS,但我陷入困境,因为我找不到比较两个数据库之间的INFORMATION_SCHEMA的方法。我希望这种语法可以区分这两个数据库,但它不会:

[Database1]..[INFORMATION_SCHEMA].[COLUMNS]

如果你现在可以告诉我,我对SQL不太熟悉

感谢任何帮助!

2 个答案:

答案 0 :(得分:1)

这将在DB1中找到不在DB2中的任何列。

select t.name as TableName
    , c.name as ColumnName
from DB1.sys.tables t
join DB1.sys.columns c on c.object_id = t.object_id

EXCEPT

select t.name as TableName
    , c.name as ColumnName
from DB2.sys.tables t
join DB2.sys.columns c on c.object_id = t.object_id

您可以简单地将其反转以查找DB2中不在DB1中的列。

另一种选择是从RedGate购买第三方组件,如SQL Compare。

答案 1 :(得分:1)

顾名思义,INFORMATION_SCHEMA是架构。因此,三部分命名是:

from Database1.INFORMATION_SCHEMA.COLUMNS

您有两个句点,这表示默认架构,但这不是视图的位置。

如果要访问其他服务器上的视图,可以使用四部分命名。