У меня есть запрос SQL Insert внутри сохраненной процедуры для вставки строк в таблицу связанный сервер.
Поскольку хранимая процедура вызывается в родительской транзакции, этот оператор Insert пытается использовать DTC для вставки строк на связанный сервер.
Я хотел бы, чтобы избегать DTC не вмешивался.
Есть ли способ сделать это (например, подсказку), чтобы оператор Insert SQL игнорировал транзакционную область?


Я предлагаю вам сохранить все, что вы хотите вставить в промежуточную таблицу, и после завершения процедуры запустить кросс-серверную вставку. Насколько мне известно, невозможно игнорировать транзакцию, в которой вы находитесь, если вы находитесь в процессе выполнения SProc.
Напротив, если вы используете пространство имен .NET 2.0 System.Transaction, вы можете указать конкретным операторам, что они не должны участвовать ни в какой транзакции родительской области. Это потребует от вас написать часть своей логики в коде, а не в хранимых процедурах, но это сработает.
Удачи, Алан.
Попробуйте использовать openquery для вызова запроса связанного сервера / sp вместо прямого вызова Это сработало для меня
так что вместо вставить в ... выберите * из mylinkedserver.pubs.dbo.authors
например ОБЪЯВИТЬ @TSQL varchar (8000), @VAR char (2) ВЫБЕРИТЕ @VAR = 'CA' SELECT @TSQL = 'SELECT * FROM OPENQUERY (MyLinkedServer,' 'SELECT * FROM pubs.dbo.authors WHERE state =' '' '' + @VAR + '' '' '' ')'
ВСТАВИТЬ В ..... EXEC (@TSQL)
Спасибо, Алан. Похоже, у меня единственный вариант - включить DTC для сервера без переписывания кода.