Скрипт для запуска операторов DDL в транзакции - PullRequest
1 голос
/ 25 ноября 2011

Я пытаюсь выполнить несколько операторов DDL в области транзакции. Я пытаюсь выполнить все операторы, которые относятся к запросу на изменение модели, как одну транзакцию, чтобы все операторы DDL не выполнялись или выполнялись успешно. Моя цель - не оставлять БД в несогласованном утверждении после выполнения группы операторов DDL.

Я обнаружил, что SQL Server 2008 R2 поддерживает транзакции для операторов DDL. Я не говорю о типах DDL DROP DB - я имею в виду CREATE TABLE, ALTER TABLE, DROP TABLE и т. Д.

Я прочитал следующие связанные темы, но не нашел ответа.

Можно ли запустить несколько операторов DDL внутри транзакции (в SQL Server)?

Модульное тестирование операторов DDL, которые должны быть в транзакции

Сценарии DDL в блоке транзакции вступают в силу даже при наличии ошибок

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

В своем исследовании я нашел несколько альтернатив, но я не уверен, какой из них выбрать, поскольку я новичок в этой области. Мне нужна помощь опытных рук.

  1. Использование XACT_ABORT в области транзакции для отмены первой ошибки в транзакции
  2. Используйте блоки TRY и CATCH и поместите операторы DDL в транзакцию внутри блока TRY

Вот страницы, которые я прочитал.

http://msdn.microsoft.com/en-us/library/ms179296.aspx

http://msdn.microsoft.com/en-us/library/ms188792.aspx

http://www.codeproject.com/KB/database/sqlservertransactions.aspx

1 Ответ

1 голос
/ 25 ноября 2011

Скачайте Red Gate SQL Compare и посмотрите, как там создаются скрипты.

Это делает транзакционный DDL и может быть расширен для регистрации.

TRY / CATCH не распространяется на пакеты, что затрудняет использование без динамического SQL

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