Как предотвратить включение запроса вставки в распределенную транзакцию?
У меня есть запрос 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)