使用 OPENQUERY 在链接服务器上更新 table
Update a table on a Linked Server using OPENQUERY
我有两个服务器: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')
但是我得到这个错误:
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 查询时,我成功 return 我正在尝试更新的行:
Select *
From OpenQuery(SERVER01,
'Select *
From SERVER01.MyDatbase.dbo.MyTable
Where Id = 1')
我知道 运行 查询的用户有权限,但我真的不知道从这里去哪里。我在某处读到这个错误与更新查询有关,而不是 returning 一行。这有什么道理吗?
我该如何解决这个问题?
谢谢
好的,我找到了答案。成功运行:
execute (@SQL) at SERVER01
我有两个服务器: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')
但是我得到这个错误:
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 查询时,我成功 return 我正在尝试更新的行:
Select *
From OpenQuery(SERVER01,
'Select *
From SERVER01.MyDatbase.dbo.MyTable
Where Id = 1')
我知道 运行 查询的用户有权限,但我真的不知道从这里去哪里。我在某处读到这个错误与更新查询有关,而不是 returning 一行。这有什么道理吗?
我该如何解决这个问题?
谢谢
好的,我找到了答案。成功运行:
execute (@SQL) at SERVER01