Как использовать OPENQUERY для правильного выполнения хранимой процедуры, которая обновляет таблицу связанного сервера? - PullRequest
0 голосов
/ 04 июля 2019

Я с трудом пытаюсь понять это.Я использую OPENQUERY для выполнения хранимых процедур на связанном сервере.Мне удалось найти способ сделать это, используя следующее:

SELECT *    
FROM   OPENQUERY(
[LINKEDSRV\SQLSRV],  
'SET FMTONLY OFF; SET NOCOUNT ON; EXEC [Database_Name_Example].Data.usp_GetNames 5,''S''')   
GO 

Причина, по которой я использую SET FMTONLY OFF и SET NOCOUNT ON, заключается в том, что, когда я попробовал приведенный выше код без них, появилось это сообщение:

Сообщение 7357, уровень 16, состояние 1, строка 1 Не удается обработать объект "EXEC [Database_Name_Example] .Data.usp_GetNames 5, 'S'".Поставщик OLE DB «SQLNCLI» для связанного сервера «LINKEDSRV \ SQLSRV» указывает, что либо у объекта нет столбцов, либо у текущего пользователя нет разрешений на этот объект.

Чтение большого количества данных в Интернете помогло мненайти ответ.Этот блог, например: http://www.sommarskog.se/share_data.html#OPENQUERY

Пока все хорошо, пока я не запутался в хранимой процедуре, использующей SELECT и UPDATE некоторые таблицы на связанном сервере.Когда я выполняю OPENQUERY, я получаю результаты из оператора SELECT, но я заметил, что он не обновляет таблицу.

Хранимая процедура выглядит следующим образом:

CREATE PROCEDURE Data.usp_GetNames (@year tinyint=NULL, @online char(1)=NULL)
if @online = 'S'    
  BEGIN
    select nam_codig, nam_desc from Names
    where nam_status = 'P'
    order by nam_date

    UPDATE Names
    SET nam_status = 'S'
    where nam_status = 'P'
END

Когда я выполняю его непосредственно на связанном сервере, он обновляет таблицу, поэтому во второй раз, когда я его выполняю, не будет больше nam_status = 'P'

Но если я выполню его с OPENQUERY, результаты будут такими же, это не UPDATE, это просто выбор данных.

Что я могу сделать, чтобы разрешить разрешения?

Спасибо !!!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...