Как предотвратить включение запроса вставки в распределенную транзакцию? - PullRequest
3 голосов
/ 17 сентября 2008

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

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

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

Можно ли как-нибудь это сделать (например, подсказку), чтобы оператор Insert SQL игнорировал область транзакции?

Ответы [ 2 ]

4 голосов
/ 17 сентября 2008

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

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

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

Удачи, Алан.

0 голосов
/ 27 марта 2018

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

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

например. ОБЪЯВИТЬ @TSQL varchar (8000), @VAR char (2) SELECT @VAR = 'CA' SELECT @TSQL = 'SELECT * FROM OPENQUERY (MyLinkedServer,' 'SELECT * FROM pubs.dbo.authors WHERE state =' '' '' + @VAR + '' '' '' ')'

Вставить в ..... EXEC (@TSQL)

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