我有两个数据库,它们都有完全相同的表名。但是,已在两个数据库之间添加和删除匹配表之间的某些列。我试图弄清楚如何编写一个只能在第一个数据库中返回列的查询,而只在第二个数据库中返回列。
我一直在使用INFORMATION_SCHEMA.TABLES和INFORMATION_SCHEMA.COLUMNS,但我陷入困境,因为我找不到比较两个数据库之间的INFORMATION_SCHEMA的方法。我希望这种语法可以区分这两个数据库,但它不会:
[Database1]..[INFORMATION_SCHEMA].[COLUMNS]
如果你现在可以告诉我,我对SQL不太熟悉
感谢任何帮助!
答案 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
您有两个句点,这表示默认架构,但这不是视图的位置。
如果要访问其他服务器上的视图,可以使用四部分命名。