Вставить в таблицу .. exec на связанном сервере не работает - PullRequest
4 голосов
/ 05 декабря 2010

Это работает, возвращая набор результатов:

exec ('select ''col'', count(1) from test.dbo.[Table1] with (nolock)') at svrA

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

insert into rowcount_sub (tablename,rowcnt)
exec ('select ''col'', count(1) from test.dbo.[Table1] with (nolock)') at svrA

Не дает этой ошибки:

OLE DB provider "SQLNCLI10" for linked server "svrA" returned message "No transaction is active.".
Msg 7391, Level 16, State 2, Line 1
The operation could not be performed because OLE DB provider "SQLNCLI10" for linked server "svrA" was unable to begin a distributed transaction.

Ответы [ 4 ]

5 голосов
/ 18 мая 2012

Мне удалось решить ту же проблему, используя OPENQUERY вместо EXEC:

insert into rowcount_sub (tablename,rowcnt)
SELECT * FROM OPENQUERY(svrA, 'select ''col'', count(1) from test.dbo.[Table1] with (nolock)')

Надеюсь, это кому-нибудь поможет ...

5 голосов
/ 03 августа 2015

Если вы не используете распределенную транзакцию специально, вы можете использовать расширенные свойства объекта связанного сервера на главном сервере, чтобы отключить продвижение распределенной транзакции.

Disable promotion of distributed transaction

2 голосов
/ 05 декабря 2010

Операция не может быть выполнена потому что поставщик OLE DB "SQLNCLI10" для связанного сервера "svrA" не удалось начать распределенную транзакцию.

Сообщение довольно ясное и довольно явное. Все, что вам нужно сделать, это открыть системную документацию и выполнить шаги по настройке распределенных транзакций: Настройка MS DTC Services .

Существует также множество блогов и учебных пособий:

0 голосов
/ 06 октября 2017

Изменение "Включить продвижение распределенной транзакции" с True на false исправило мою проблему.

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