2015-09-09 51 views
1

鏈接服務器上的表我有兩臺服務器:SQLSERVER01SQLSERVER02,我試圖以更新的數據上SERVER01SERVER02SERVER01是鏈接服務器)。更新使用OPENQUERY

我的更新查詢當前的動態,看起來像這樣

DECLARE @SQL NVARCHAR(MAX) 
DECLARE @ID INT 

SET @ID = 1 

Set @SQL = 'Update SERVER01.MyDatbase.dbo.MyTable 
      set ModifiedDate = GetDate(), SomeOtherValue = ''xyz'' 
      Where Id = ' Convert(varchar(10), @ID) 

如果我現在請

EXEC(@SQL) 

有時會工作,但有時它只是掛在那裏的年齡,當我運行sp_active我看到PREEMPTIVE_OLEDBOPS

所以,我然後使用打開查詢如下

Select * 
From OpenQuery(SERVER01, 
       'Update SERVER01.MyDatbase.dbo.MyTable 
       set ModifiedDate = GetDate(), SomeOtherValue = ''xyz'' 
       Where Id = 1') 

嘗試,但我得到這個錯誤:

The OLE DB provider "SQLNCLI11" for linked server "SERVER01" indicates that either the object has no columns or the current user does not have permissions on that object.

當我運行下面的select查詢我成功返回我想要的行更新:

Select * 
From OpenQuery(SERVER01, 
       'Select * 
       From SERVER01.MyDatbase.dbo.MyTable 
       Where Id = 1') 

我知道運行該查詢的用戶有權限,但我reall你不知道該從哪裏出發。我在某處看到這個錯誤與更新查詢沒有返回一行有關。有沒有道理呢?

我該如何解決這個問題?

謝謝

回答

1

好的,我找到了答案。這工作成功:

execute (@SQL) at SERVER01