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

StackOverflow https://stackoverflow.com/questions/76403

Вопрос

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

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

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

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

Это было полезно?

Решение

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

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

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

Удачи, Алан.

Другие советы

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

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

например ,ОБЪЯВИТЬ переменную @TSQL (8000), переменную @VAR char(2) ВЫБРАТЬ @VAR = 'CA' SELECT @TSQL = 'ВЫБРАТЬ * ИЗ OPENQUERY(MyLinkedServer,"ВЫБРАТЬ * ИЗ pubs.dbo.authors, ГДЕ state = ""' + @VAR + """')'

ВСТАВИТЬ ВНУТРЬ .....EXEC (@TSQL)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top