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

Откуда:
Сообщений: 68
CREATE PROCEDURE [dbo].[wk_test]

AS
CREATE TABLE #Table1 (f1 int, f2 int)
CREATE TABLE #Table2 (f1 int, f2 int)
BEGIN TRAN SomeTran
INSERT INTO #Table1 (f1, FF) VALUES (1, 2) -- FF - нет, операция не выполняется и транзакция должна откатиться

UPDATE #Table2 SET f1 = 1
COMMIT TRAN SomeTran

А в результате UPDATE спокойно выполняется. ПОЧЕМУ?
25 мар 03, 13:58    [155904]     Ответить | Цитировать Сообщить модератору
 Re: Транзакции  [new]
funikovyuri
Member

Откуда: Симферополь
Сообщений: 4045
СМ. SET XACT_ABORT ON
25 мар 03, 14:03    [155908]     Ответить | Цитировать Сообщить модератору
 Re: Транзакции  [new]
YellowMan
Member

Откуда: острова
Сообщений: 1047
If @@ERROR>0 begin  rollback tran return end


или

SET XACT_ABORT ON
25 мар 03, 14:05    [155910]     Ответить | Цитировать Сообщить модератору
 Re: Транзакции  [new]
YuriAM
Member

Откуда:
Сообщений: 829
Допустим в INSERT есть ошибка
следующая команда Update тоже будет настроена на выполнение и чтобы их утвердить, остался COMMIT
которе ты и делаешь

Наверно вы хотели проверить код ошибки @@error
И при <> 0 сделать ROLLBACK
25 мар 03, 14:06    [155911]     Ответить | Цитировать Сообщить модератору
 Re: Транзакции  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
https://www.sql.ru/forum/actualthread.aspx?bid=1&tid=26051
25 мар 03, 14:12    [155921]     Ответить | Цитировать Сообщить модератору
 Re: Транзакции  [new]
Call
Member

Откуда: SFBA
Сообщений: 481
Попробуйте запустить скрипт без создания процедуры.



CREATE TABLE #Table1 (f1 int, f2 int)

CREATE TABLE #Table2 (f1 int, f2 int)
GO
INSERT INTO #Table2 (f1, F2) VALUES (2, 2)

GO
BEGIN TRAN SomeTran
INSERT INTO #Table1 (f1, FF) VALUES (1, 2) -- FF - нет, операция не выполняется и транзакция должна откатиться

UPDATE #Table2 SET f1 = 1 -- Транзакция откатывается.

COMMIT TRAN SomeTran

go

select *
from #Table2


Результат:

(1 row(s) affected)

Server: Msg 207, Level 16, State 1, Line 2
Invalid column name 'FF'.

(1 row(s) affected)


Транзакция была откатана полностью.
UPDATE не выполняется :-)
26 мар 03, 03:32    [156405]     Ответить | Цитировать Сообщить модератору
 Re: Транзакции  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
To Call.

Приведенный тобой пример действительно откатывает транзакцию, так как ты пытаешься вставить в несуществующее поле, но вот если ты в инсерте нарушил бы какой-нибудь констрэйнт, то была бы откачена только эта инструкция, а следующая выполнилась и транзакция зафиксировалась бы.
26 мар 03, 08:30    [156463]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить