Как предотвратить включение запроса вставки в распределенную транзакцию?

У меня есть запрос SQL Insert внутри хранимого процесса, для вставки строк в таблицу связанных серверов.

Поскольку хранимый процесс вызывается в родительской транзакции, этот оператор Insert пытается использовать DTC для вставки строк в связанный сервер.

Я хотел бы избежать участия DTC.

Есть ли способ, которым я могу сделать это (как подсказка) для оператора Вставить SQL, чтобы игнорировать транзакционную область?

2 ответа

Решение

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

Напротив, если вы используете пространство имен System.Transaction в.NET 2.0, вы можете указать конкретным операторам не участвовать в какой-либо родительской транзакции области. Это потребует от вас написания части вашей логики в коде, а не хранимых процедур, но будет работать.

Вот соответствующая ссылка.

Удачи, Алан.

Попробуйте использовать openquery для вызова связанного сервера запрос /sp вместо прямого вызова, который работал для меня

поэтому вместо вставки в... выберите * из mylinkedserver.pubs.dbo.authors

например, DECLARE @TSQL varchar (8000), @VAR char (2) SELECT @VAR = 'CA' SELECT @TSQL = 'SELECT * FROM OPENQUERY (MyLinkedServer,' 'SELECT * FROM pubs.dbo.authors WHERE state =' '' '' + @VAR + '' '' '' ')'

INSERT INTO..... EXEC (@TSQL)

Другие вопросы по тегам