使用OPENQUERY更新链接服务器上的表

时间:2015-09-09 05:17:44

标签: sql-server sql-update openquery

我有两台服务器:SQLSERVER01SQLSERVER02我正在尝试更新来自SERVER01的{​​{1}}上的数据(SERVER02是一个链接服务器)。

我的更新查询目前是动态的,看起来像这样

SERVER01

如果我现在打电话

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

但是我收到了这个错误:

  

OLE DB提供程序" SQLNCLI11"对于链接服务器" SERVER01"表示该对象没有列,或者当前用户没有该对象的权限。

当我运行以下选择查询时,我成功返回了我尝试更新的行:

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

我知道运行查询的用户有权限,但我真的不知道从哪里开始。我在某地读到这个错误与更新查询没有返回一行有关。这有什么道理吗?

我该如何解决这个问题?

由于

1 个答案:

答案 0 :(得分:1)

好的,我找到了答案。这很成功:

execute (@SQL) at SERVER01