2
經過多次的調整之後,我設法安裝了正確的ODBC驅動程序,併成功在SQL Server 2008上創建了一個鏈接服務器,通過它我可以從SQL服務器訪問我的PostgreSQL數據庫。從鏈接服務器傳輸表數據的更快方法
with mbRemote as
(
select
*
from
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*/
then
update
set
mbLocal.field1=mbRemote.field1,
mbLocal.field2=mbRemote.field2,
mbLocal.field3=mbRemote.field3,
mbLocal.field4=mbRemote.field4
when not matched then
insert
(
id,
field1,
field2,
field3,
field4
)
values
(
mbRemote.id,
mbRemote.field1,
mbRemote.field2,
mbRemote.field3,
mbRemote.field4
)
WHEN NOT MATCHED BY SOURCE then delete;
這個語句完成後,本地(SQL服務器:
我使用歸併採取以下形式的語句複製所有從一些在PGSQL數據庫中的表的數據到SQL Server )複製與遠程(PgSQL服務器)完全同步。
關於這種方法的幾個問題:
- 是理智?
- 它讓我感到更新將在本地行中的所有未必更改的字段上運行。唯一的先決條件是本地和遠程ID字段匹配。是否有更細粒度的方法/限制合併統計的方法,只更新實際上已更改的行?
我試過了SSIS路由,但是它真的有x64 SqlServer和一個「實驗性」的x64 odbc驅動程序。這條路線確實是最後的選擇,但它堅如磐石,非常棒。我將在關於我的加速調整的主要問題中添加一些信息,這與您的建議相符。 – spender 2010-03-19 00:12:11