【问题标题】:Update a table on a Linked Server using OPENQUERY使用 OPENQUERY 更新链接服务器上的表
【发布时间】:2015-09-09 05:17:43
【问题描述】:

我有两台服务器: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')

我知道运行查询的用户有权限,但我真的不知道从这里去哪里。我在某处读到此错误与更新查询未返回行有关。这有什么道理吗?

我该如何解决这个问题?

谢谢

【问题讨论】:

    标签: sql-server sql-update openquery


    【解决方案1】:

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

    execute (@SQL) at SERVER01
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-23
      • 1970-01-01
      • 1970-01-01
      • 2011-10-01
      相关资源
      最近更新 更多