Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Сохранение Insert`а после транзакции  [new]
Wrun
Member [заблокирован]

Откуда:
Сообщений: 126
Добрый день!

Подскажите, как правильно организовать следующее:

У меня процедура (транзакционная) выполняет по шагам много действий (других процедур).
В этих шагах могут возникнуть ошибки (как критичные, так и идеологические), в следствии которых я вызываю rollback.
Только вот охота сохранять протокол который был высчитан внутри транзакции.
Т.е. это обычный Select, который самое простое было бы Insert`нуть в протокол таблицу, но ведь транзакция это действие откатит.

Как поступать в таком случае?
10 окт 14, 17:41    [16688655]     Ответить | Цитировать Сообщить модератору
 Re: Сохранение Insert`а после транзакции  [new]
Shakill
Member

Откуда: мск
Сообщений: 1887
Wrun, сохраняете данные в локальную табличную переменную, которую вставляете в лог уже после ролбэка/коммита
10 окт 14, 17:49    [16688685]     Ответить | Цитировать Сообщить модератору
 Re: Сохранение Insert`а после транзакции  [new]
msLex
Member

Откуда:
Сообщений: 9303
Wrun,

В MSSQL нет автономных транзакций, поэтому вариантов два
Первый, как уже сказали, использовать табличные переменные.
Второе, сделать логирование через CLR, в котором можно использовать независимые транзакции.
10 окт 14, 18:19    [16688828]     Ответить | Цитировать Сообщить модератору
 Re: Сохранение Insert`а после транзакции  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4902
msLex
Wrun,

В MSSQL нет автономных транзакций, поэтому вариантов два
Первый, как уже сказали, использовать табличные переменные.
Второе, сделать логирование через CLR, в котором можно использовать независимые транзакции.


Третий вариант использовать SSIS, где уже есть логированние ошибок и отчёты для их просмотра.
10 окт 14, 18:46    [16688954]     Ответить | Цитировать Сообщить модератору
 Re: Сохранение Insert`а после транзакции  [new]
msLex
Member

Откуда:
Сообщений: 9303
a_voronin
msLex
Wrun,

В MSSQL нет автономных транзакций, поэтому вариантов два
Первый, как уже сказали, использовать табличные переменные.
Второе, сделать логирование через CLR, в котором можно использовать независимые транзакции.


Третий вариант использовать SSIS, где уже есть логированние ошибок и отчёты для их просмотра.

Какой SSIS?
Пользователь в приложении жмакнул на кнопку "провести документ", хочется пологировать какие операции и сколько при этом выполнялись даже в случае ошибки.
10 окт 14, 18:58    [16689000]     Ответить | Цитировать Сообщить модератору
 Re: Сохранение Insert`а после транзакции  [new]
Glory
Member

Откуда:
Сообщений: 104751
RAISERROR ... WITH LOG
xp_logevent
10 окт 14, 18:59    [16689007]     Ответить | Цитировать Сообщить модератору
 Re: Сохранение Insert`а после транзакции  [new]
Wrun
Member [заблокирован]

Откуда:
Сообщений: 126
Shakill
Wrun, сохраняете данные в локальную табличную переменную, которую вставляете в лог уже после ролбэка/коммита


Т.е. Переменные не очищаются транзакцией (извиняюсь за лень - не тестировал, нет компа под рукой...)
10 окт 14, 19:15    [16689086]     Ответить | Цитировать Сообщить модератору
 Re: Сохранение Insert`а после транзакции  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31986
Wrun
Shakill
Wrun, сохраняете данные в локальную табличную переменную, которую вставляете в лог уже после ролбэка/коммита

Т.е. Переменные не очищаются транзакцией (извиняюсь за лень - не тестировал, нет компа под рукой...)
Да
10 окт 14, 20:20    [16689308]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить