跨数据库服务器连接的SQL Server 2005脚本

时间:2010-04-27 10:52:21

标签: sql sql-server sql-server-2005 join

我有以下脚本,我用它在两个不同数据库的表之间给我一个简单的“差异”。 (注意:实际上我的比较不只是一个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

我现在需要在不同服务器上存在的两个数据库上运行此脚本。目前,我的解决方案是从一台服务器备份数据库,将其还原到另一台服务器,然后运行脚本。

我很确定这是可能的,但是,这可能是一堆蠕虫吗?这是我需要执行的一项非常罕见的任务,如果它涉及大量的数据库设置更改,那么我可能会坚持使用我的备份方法。

2 个答案:

答案 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解决方案将变得越来越有吸引力,因为为分布式查询生成的计划将变得难以管理,效率低下。

相关问题