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

Откуда: Мгн
Сообщений: 12
в студии выполняем запрос

exec [__log_pack] '20101231'

запрос выполнился. точно ВЫПОЛНИЛСЯ! все ок. НО! когда нажали кнопку "disconnect" - пошел rollback! вопрос: почему?

ЗЫ:
1) ms sql server 2005 (9.0.4035)
2) процедура выглядит так:

create proc [dbo].[__log_pack] @date_beg datetime
AS
begin
declare @s varchar(300)
begin tran
begin try
insert into __log_arc <...>
select <...> from __log l with(nolock) where <...>
delete from __log where <...>
end try
begin catch
rollback tran
select @s='Невозможно перенести данные '+Error_message()
raiserror(@s,16,1)
RETURN
end catch
commit tran
end
26 окт 11, 09:30    [11499995]     Ответить | Цитировать Сообщить модератору
 Re: rollback после дисконнекта! что за прикол??  [new]
iljy
Member

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

добавьте после exec select @@TRANCOUNT
26 окт 11, 09:56    [11500122]     Ответить | Цитировать Сообщить модератору
 Re: rollback после дисконнекта! что за прикол??  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31981
iljy
rnt777,

добавьте после exec select @@TRANCOUNT
И принт ещё можно добавить перед коммитом.

Может, там return где-то в середине кода?
26 окт 11, 10:18    [11500267]     Ответить | Цитировать Сообщить модератору
 Re: rollback после дисконнекта! что за прикол??  [new]
iljy
Member

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

может быть конечно, но это было бы совсем смешно я скорее подумал про IMPLICIT_TRANSACTION
26 окт 11, 10:22    [11500289]     Ответить | Цитировать Сообщить модератору
 Re: rollback после дисконнекта! что за прикол??  [new]
aleks2
Guest
rnt777
в студии выполняем запрос

exec [__log_pack] '20101231'

запрос выполнился. точно ВЫПОЛНИЛСЯ! все ок. НО! когда нажали кнопку "disconnect" - пошел rollback! вопрос: почему?



Патамушта транзакции бывают ВЛОЖЕННЫЕ. И COMMIT тока уменьшит счетчик вложений @@TRANCOUNT, а совсем даж не завершит транзакцию и тока если @@TRANCOUNT=1, только тогда COMMIT закроет транзакцию.


When used in nested transactions, commits of the inner transactions do not free resources or make their modifications permanent. The data modifications are made permanent and resources freed only when the outer transaction is committed. Each COMMIT TRANSACTION issued when @@TRANCOUNT is greater than 1 simply decrements @@TRANCOUNT by 1. When @@TRANCOUNT is finally decremented to 0, the entire outer transaction is committed. Because transaction_name is ignored by the Database Engine, issuing a COMMIT TRANSACTION referencing the name of an outer transaction when there are outstanding inner transactions only decrements @@TRANCOUNT by 1.

Issuing a COMMIT TRANSACTION when @@TRANCOUNT is 0 results in an error; there is no corresponding BEGIN TRANSACTION.

26 окт 11, 10:26    [11500328]     Ответить | Цитировать Сообщить модератору
 Re: rollback после дисконнекта! что за прикол??  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31981
iljy
я скорее подумал про IMPLICIT_TRANSACTION
Ну да, это более вероятно...
26 окт 11, 10:29    [11500345]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить