если инструкция DDL завершается неудачно, вся транзакция откатывается на сервере sql - PullRequest
0 голосов
/ 24 марта 2009

У меня есть серия операторов DML и DDL (только для просмотра в виде отбрасывания), которые необходимо выполнить в рамках одной транзакции из приложения VB.net. Я использую commandObj, и держал прежде всего, я держал инструкцию beginTransaction. Все работает нормально, ожидайте, когда ошибка возвращается оператором Drop. Если оператор Drop возвращает ошибку, тогда вся транзакция откатывается. Я не хочу этого. Я хочу продолжить, даже если Drop не сможет сохранить другие операторы DML, которые были выполнены до Drop. это возможно?

заранее спасибо
Sai

Ответы [ 5 ]

1 голос
/ 25 марта 2009

Спасибо всем за ваши ответы ..

На самом деле перед выполнением Drop View уже есть проверка, существует ли представление. Проблема с опущенным представлением возникнет только в случае блокировки другим пользователем. на данный момент, так как вы переместили все транзакции DML после выполнения отбрасывания, таким образом, даже если оператор отбрасывания сбрасывается (что приведет к откату всех предыдущих транзакций), проблем не возникнет, так как выполняется первый оператор.

0 голосов
/ 24 марта 2009

Вы можете запустить выбор в представлении sysobjects, чтобы проверить, существует ли представление, и удалить его, только если он существует.

Вы также можете использовать try ... catch в хранимой процедуре.

Как и другие упомянутые, вы также можете отбросить представление перед транзакцией.

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

0 голосов
/ 24 марта 2009

Затем переместите ваш DDL до или после ваших операторов COMMIT и / или ROLLBACK, в зависимости от ситуации.

0 голосов
/ 24 марта 2009

Выполняйте ваши заявления индивидуально и обрабатывайте ошибки по мере необходимости (откат или не откат).

0 голосов
/ 24 марта 2009

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

Узнайте, почему произошла ошибка, и исправьте ее вместо DROP VIEW

РЕДАКТИРОВАТЬ: Если это может быть представление, которое не существует (не создан или уже удален), вы можете использовать синтаксис IF EXISTS (....).

Пример здесь .

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