Транзакции в MsSQL

sanek300509

есть следующий код

CREATE PROCEDURE delete_actions @id int
as
BEGIN TRAN T1
delete from ApplicationActions where ActionId = @id
if @@ERROR = 0
begin
delete from RoleActions where ActionId = @id
end
else begin
return
end
if @@ERROR = 0
begin
delete from Actions where ActionId = @id
end
else begin
return
end
COMMIT TRAN T1
GO

если какой-нибудь запрос не выполнился?
нужно ли делать rollback на return ?
спасибо.

daru

есть следующий код
А почему не использовать для этого средства самой БД?
ActionId - foreign key и всё такое.. ?
нужно ли делать rollback на return ?
Да, нужно.

sanek300509

А почему не использовать для этого средства самой БД?
ActionId - foreign key и всё такое.. ?
с этого момента поподробнее?
delete cascade ?

sanek300509

не рулит. принципиальный заказчик no cascade.

daru

аргументирует чем?

bleyman

Он чё, мудаг?

madik_zxz

delete cascade ?
Это еще в транзакциях зачем?
Достаточно после каждого действия проверять @@ERROR, Если все ОК выполнять дальше, если же произошла ошибка делать откат транзакции - ROLLBACK TRANSACTION, но это надо использовать осторожно ибо несмотря на уровень вложенности транзакций откатится транзакция целеком. А можно еще попробывать сделать n попыток выполнить действие (как проломное средство против DEADLOCK, если такое требуется).
Оставить комментарий
Имя или ник:
Комментарий: