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

Откуда:
Сообщений: 461
Нахожусь в процедуре, открыл транзакцию, поделал что-то, подумал и понял, что транзакция мне не нравится (из соображений моей бизнес-логики) и комитить такую транзакцию я не собираюсь. Вопрос: как сделать insert в некую-лог-таблицу, чтобы этот инсерт не умер вместе с транзакцией? Подозреваю, что никак, ибо это транзакция, и этим все сказано. Написал clr-процедуру, в которой пытался открыть новое (не контекстное) подключение, далее пытался делать insert используя только что созданное подключение, но обломался, ибо что-то там про невозможность использования контекста подключения сказано было.
Я, конечно, могу придумать что-то еще, запустить из clr-процедуры приложение, которое само сделает инсерт, или есть еще более экстримальные варианты.. но хочется как-то чтоб попроще было все...
спс.
5 май 11, 13:55    [10609899]     Ответить | Цитировать Сообщить модератору
 Re: insert за скобками транзакции  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Через табличные переменные, например.
5 май 11, 13:59    [10609932]     Ответить | Цитировать Сообщить модератору
 Re: insert за скобками транзакции  [new]
Salik
Member

Откуда:
Сообщений: 297
Сохранить в переменной значения для инсертов,
а после rollback сделать инсерт в некую-лог-таблицу
:)
5 май 11, 14:07    [10610014]     Ответить | Цитировать Сообщить модератору
 Re: insert за скобками транзакции  [new]
RubinDm
Member

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

не, товарищи.. ) не прокатит.. )) это мне переменную придется таскать в параметрах вызовов процедур, а их много. И вообще, вопрос, конечно, задан в контексте решения конкретной задачи (моей), но решить его хочется в общем виде.. )) короче, есть уже много кода, который нельзя трогать (параметры процедур трогать низя совсем точно). Но можно что-нить вписать в код процедур в целях логирования.. вопрос: что бы такое вписать?
5 май 11, 14:16    [10610089]     Ответить | Цитировать Сообщить модератору
 Re: insert за скобками транзакции  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
RubinDm
Salik,

не, товарищи.. ) не прокатит.. )) это мне переменную придется таскать в параметрах вызовов процедур, а их много. И вообще, вопрос, конечно, задан в контексте решения конкретной задачи (моей), но решить его хочется в общем виде.. )) короче, есть уже много кода, который нельзя трогать (параметры процедур трогать низя совсем точно). Но можно что-нить вписать в код процедур в целях логирования.. вопрос: что бы такое вписать?
Можно еще прикрутить Service Broker, но, имхо, из пушки по воробьям.

Сообщение было отредактировано: 5 май 11, 14:18
5 май 11, 14:17    [10610103]     Ответить | Цитировать Сообщить модератору
 Re: insert за скобками транзакции  [new]
RubinDm
Member

Откуда:
Сообщений: 461
а доступ из сиквела к виндовым журналам в каком либо виде есть? на запись? на чтение? или может есть доступ к чему-то еще, что можно использовать как лог?
зы: давно помню решали задачку отправки смс из сиквела, решили.. сейчас сотрудник высказал вслух безумную идею купить симку, слать логи на нее, и оформить подписку у мтс на репорты с смс-ками на заданный номер :]
5 май 11, 14:24    [10610153]     Ответить | Цитировать Сообщить модератору
 Re: insert за скобками транзакции  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
RubinDm
а доступ из сиквела к виндовым журналам в каком либо виде есть? на запись? на чтение? или может есть доступ к чему-то еще, что можно использовать как лог?
Было что-то.
RubinDm
зы: давно помню решали задачку отправки смс из сиквела, решили.. сейчас сотрудник высказал вслух безумную идею купить симку, слать логи на нее, и оформить подписку у мтс на репорты с смс-ками на заданный номер :]
А травы отсыпите?
5 май 11, 14:28    [10610175]     Ответить | Цитировать Сообщить модератору
 Re: insert за скобками транзакции  [new]
invm
Member

Откуда: Москва
Сообщений: 9824
Аудит и автономные транзакции с применением CLR в MS SQL Server
5 май 11, 14:29    [10610187]     Ответить | Цитировать Сообщить модератору
 Re: insert за скобками транзакции  [new]
iljy
Member

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

xp_logevent
RAISERROR ... WITH LOG
5 май 11, 14:34    [10610227]     Ответить | Цитировать Сообщить модератору
 Re: insert за скобками транзакции  [new]
Prolog
Member

Откуда: Москва
Сообщений: 2793
RubinDm
а доступ из сиквела к виндовым журналам в каком либо виде есть? на запись?
xp_logevent
5 май 11, 14:34    [10610230]     Ответить | Цитировать Сообщить модератору
 Re: insert за скобками транзакции  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
а еще можно писать и читать реестр (..если каненчо прав хватит )
5 май 11, 14:46    [10610329]     Ответить | Цитировать Сообщить модератору
 Re: insert за скобками транзакции  [new]
pacha
Member

Откуда:
Сообщений: 239
RubinDm, а почему бы не воспользоваться точками сохранения транзакции?
Пример:
create table #t (i int)
begin tran
	save tran save_point;
		insert into #t select 1
	rollback tran save_point;

	insert into #t select 2
commit tran

select * from #t
5 май 11, 14:52    [10610389]     Ответить | Цитировать Сообщить модератору
 Re: insert за скобками транзакции  [new]
RubinDm
Member

Откуда:
Сообщений: 461
вот идеальное решение, которое мне подсказали: https://www.sql.ru/blogs/decolores/894
оно идеально тем, что:
1. нет необходимости таскать переменные с логами через процедуры (ну, блин, криво это, да и куча клиентов отвалятся)
2. нет необходимости работать с #_временными_таблицами. Это круто, т.к. кто-то должен создавать эти таблицы, а не кому. Клиентское приложение их не создает и не читает. И дописать приложение у меня возможности также нет, и желания тоже нет.
3. предложенное по ссылке решение тривиально в реализации и применимо из любой точки кода, где есть бизнес-логика. Оно проверено (мной) и оно реально работает, без переписывания существующего кода и клиентских приложений.

спасибо ВСЕМ, даже тем, чьи идеи не подошли. интересно было ознакомиться.
5 май 11, 15:15    [10610623]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить