繁体   English   中英

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

[英]Update a table on a Linked Server using OPENQUERY

我有两个服务器: SQLSERVER01SQLSERVER02 ,我正在尝试从SERVER02更新SERVER01数据( 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

所以,然后我尝试使用开放查询,如下所示

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

但是我得到这个错误:

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

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

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

我知道正在运行查询的用户具有权限,但是我真的不知道从这里去哪里。 我在某个地方读到此错误与更新查询不返回行有关。 有没有道理呢?

我该如何解决?

谢谢

好吧,我找到了答案。 这可以成功工作:

execute (@SQL) at SERVER01

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM