利用 OpenDataSource 更新遠端資料表時,該資料表要建立主鍵

透過 SQL Server 2008 以 Opendatasource 遠端更新 SQL Server 2000 的資料時,目標資料表要建立主鍵

範例語法如下:

update OPENDATASOURCE(‘SQLNCLI’,’Data Source=SQL;User ID=…;Password=…’).DB.dbo.TB
set School =’xxx’ where USER_NAME =N’ooo’

若遠端的資料表未建立主鍵,會有類似如下的錯誤訊息:

Error: 16955, Severity: 16, State: 2   無法建立可接受的資料指標。

Error: 16945, Severity: 16, State: 1  資料指標並未宣告。

透過 Profiler 觀察上述語法在遠端實際執行的狀況:

declare @P1 int
set @P1=0
declare @P2 int
set @P2=98305
declare @P3 int
set @P3=311300
declare @P4 int
set @P4=0
exec sp_cursoropen @P1 output, N’select * from "DB"."dbo"."TB"’, @P2 output, @P3 output, @P4 output
select @P1, @P2, @P3, @P4

若未建立主鍵,上述語法會失敗,以下的語法就不會被執行

exec sp_cursorfetch 180150000, 16, 1, 1
exec sp_cursorfetch 180150000, 16, 2, 100

exec sp_cursor 180150000, 33, 1, N'[DB].[dbo].[TB]’, @School = N’ooo’

 

另外,若不想要有分散式交易,不要在本地端開啟交易後,再以 OPENDATASOURCE 更新遠端。而把更新的語法寫在遠端的預存程序內,並在該預存程序內包起交易。然後透過如下的方式執行:

exec OPENDATASOURCE(…).DB.Schema.SP 參數 

 

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 變更 )

Twitter picture

You are commenting using your Twitter account. Log Out / 變更 )

Facebook照片

You are commenting using your Facebook account. Log Out / 變更 )

Google+ photo

You are commenting using your Google+ account. Log Out / 變更 )

連結到 %s

%d 位部落客按了讚: