Хранимая процедура SQL Server 2005 с ведением журнала и обработкой ошибок - PullRequest
2 голосов
/ 19 января 2012

У меня есть хранимая процедура (SQL 2005), которая обрабатывает гигантскую таблицу и группирует старые данные из прошлого (до года назад). Он имеет следующие основные шаги:

  • скопировать старые данные, сгруппированные в новую таблицу
  • скопировать последние данные как есть в новую таблицу
  • переименовать таблицу

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

Как я могу решить эту проблему?

Ответы [ 2 ]

1 голос
/ 19 января 2012
  • Используйте SET XACT_ABORT ON для принудительного отката
  • Чтобы перехватить все ошибки (где выполняется код), используйте блоки TRY / CATCH.

Затем вы можете просто регистрировать ошибки в ваших блоках CATCH.

Пример здесь (можно добавить собственную регистрацию): Вложенные хранимые процедуры, содержащие шаблон TRY CATCH ROLLBACK?

Лично я считаю это более элегантным, чем использование табличных переменных.

1 голос
/ 19 января 2012

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

...