2015-09-09 131 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