2010-12-05 3 views
3

Это работает, возвращая результирующий:Вставить в таблицу .. Exec на связанном сервере не работает

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. 
+0

Может ли это иметь место с MSDTC (координатором по распределенным транзакциям на основе микропровода)? вы можете запустить его на services.msc – 2010-12-05 19:14:23

ответ

2

The operation could not be performed because OLE DB provider "SQLNCLI10" for linked server "svrA" was unable to begin a distributed transaction.

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

Есть также много блогов и учебники там:

5

Я был в состоянии решить ту же проблему с помощью OPENQUERY вместо EXEC:

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

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

5

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

Disable promotion of distributed transaction

0

Изменения «Включить Продвижение распределенной транзакции» от Верного ложной фиксированной моей проблемы.

Смежные вопросы