我有以下脚本,我用它在两个不同数据库的表之间给我一个简单的“差异”。 (注意:实际上我的比较不只是一个ID)
SELECT
MyTableA.MyId,
MyTableB.MyId
FROM
MyDataBaseA..MyTable MyTableA
FULL OUTER JOIN
MyDataBaseB..MyTable MyTableB
ON
MyTableA.MyId = MyTableB.MyId
WHERE
MyTableA.MyId IS NULL
OR
MyTableB.MyId IS NULL
我现在需要在不同服务器上存在的两个数据库上运行此脚本。目前,我的解决方案是从一台服务器备份数据库,将其还原到另一台服务器,然后运行脚本。
我很确定这是可能的,但是,这可能是一堆蠕虫吗?这是我需要执行的一项非常罕见的任务,如果它涉及大量的数据库设置更改,那么我可能会坚持使用我的备份方法。
答案 0 :(得分:1)
如果在SQL中设置链接服务器,则可以像这样运行常规查询。 这假设MyDatabaseB位于您设置链接服务器的远程服务器上,并且该查询正在具有MyDatabaseA的服务器上运行。
SELECT
MyTableA.MyId,
MyTableB.MyId
FROM
MyDataBaseA..MyTable MyTableA
FULL OUTER JOIN
LinkedServerName.MyDataBaseB.dbo.MyTable MyTableB
ON
MyTableA.MyId = MyTableB.MyId
WHERE
MyTableA.MyId IS NULL
OR
MyTableB.MyId IS NULL
答案 1 :(得分:0)
我也会推荐SSIS。有两个数据源select ID from MyTableA order by ID
和一个select ID from MyTableB order by ID
。 ORDER BY非常重要,您需要进入高级编辑器并将输出标记为在两个源中按ID排序。然后将这两个源插入到合并连接转换中,并指定它是完全连接类型。然后将连接的输出插入条件性拆分转换,并将具有非NULL A和B ID的行与A的ID或B的ID上的NULL分开。最后的那些将是你的'差异'。
根据我的经验,随着表格大小的增大,SSIS解决方案将变得越来越有吸引力,因为为分布式查询生成的计划将变得难以管理,效率低下。