以更快的方式从链接服务器传输表数据

2 人关注

经过一番折腾,我成功地安装了正确的ODBC驱动,并成功地在SQL Server 2008上创建了一个链接服务器,通过它我可以从SQL服务器访问我的PostgreSQL数据库。

我正在使用合并语句将PgSQL数据库中的一些表的所有数据复制到SQL Server中,合并语句的形式如下。

with mbRemote as 
        select
            openquery(someLinkedDb,'select * from someTable')
merge into someTable mbLocal 
using mbRemote on mbLocal.id=mbRemote.id
when matched 
        /*edit*/
/*clause below really speeds things up when many rows are unchanged*/
/*can you think of anything else?*/
and not (mbLocal.field1=mbRemote.field1
                and mbLocal.field2=mbRemote.field2
                and mbLocal.field3=mbRemote.field3
                and mbLocal.field4=mbRemote.field4)
        /*end edit*/
update
                mbLocal.field1=mbRemote.field1,
                mbLocal.field2=mbRemote.field2,
                mbLocal.field3=mbRemote.field3,
                mbLocal.field4=mbRemote.field4
when not matched then
insert
            field1,
            field2,
            field3,
            field4
        values
            mbRemote.id,
            mbRemote.field1,
            mbRemote.field2,
            mbRemote.field3,
            mbRemote.field4
WHEN NOT MATCHED BY SOURCE then delete;

在这个语句完成后,本地(SQL Server)副本与远程(PgSQL服务器)完全同步。

关于这种方法有几个问题。

  • 它是理智的吗?
  • 我认为,更新将在本地行的所有字段上运行,而这些字段不一定发生变化。唯一的先决条件是本地和远程的id字段要匹配。有没有一种更细化的方法/方式来约束合并语句,使其只更新实际发生变化的行?
  • tsql
    sql-server-2008
    postgresql
    linked-server
    spender
    spender
    发布于 2010-03-17
    1 个回答
    grapefruitmoon
    grapefruitmoon
    发布于 2010-03-19
    已采纳
    0 人赞同