【发布时间】:2015-09-09 05:17:43
【问题描述】:
我有两台服务器:SQLSERVER01 和 SQLSERVER02,我正在尝试从 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