Вставка результатов хранимой процедуры со связанного сервера - PullRequest
7 голосов
/ 29 июля 2011

Можно ли вставить результаты удаленной хранимой процедуры во временную таблицу? Например

CREATE TABLE #test(id INT)
INSERT INTO #test 
EXEC [linkedserver].remoteDB.dbo.tst
DROP TABLE #test

Где tst - это хранимая процедура, которая возвращает идентификаторы.

Если я запускаю exec самостоятельно, он работает нормально

EXEC [linkedserver].remoteDB.dbo.tst

Однако, когда я помещаю это как часть вставки, я получаю эту ошибку

" Поставщик OLE DB" SQLNCLI "для связанного сервера" connectedserver "вернул сообщение" Менеджер транзакций партнера отключил свою поддержку удаленных / сетевых транзакций. ". Сообщение 7391, уровень 16, состояние 2, строка 2 Не удалось выполнить операцию, поскольку поставщику OLE DB «SQLNCLI» для связанного сервера «connectedserver» не удалось начать распределенную транзакцию."

На одной машине запущен SQL Server 2005, а на другой - 2008, на обеих запущена служба «Координатор распределенных транзакций».

Ответы [ 2 ]

3 голосов
/ 29 июля 2011

Мне кажется, что поддержка удаленных транзакций не была правильно включена.

Вы пробовали, следуя инструкциям здесь:

1 голос
/ 20 марта 2015

Я думаю, причина в том, что когда мы вызываем только EXEC, он не вызывается в транзакции, так что нет проблем.Когда мы вызываем INSERT EXEC, он вызывается в txn, поэтому удаленный сервер должен включить поддержку сети txn.Но мы можем избежать этого с помощью:

https://dba.stackexchange.com/questions/46541/how-to-insert-in-table-from-remote-stored-procedure-without-creating-a-distribut

...