ورود

View Full Version : سوال: RollBack Transaction در Trigger



Arghavan_Reza
پنج شنبه 26 اردیبهشت 1387, 17:48 عصر
دوستان گرامی متن تریگر زیر را ملاحظه فرمایید:


CREATE TRIGGER [Table1_Update] ON [dbo].[Table1]
FOR INSERT, UPDATE
AS
IF ( <Some Conditions> )
BEGIN
RAISERROR ( <Error Message> , 16, 1)
ROLLBACK TRAN
END

چنانچه هنگام درج یا ویرایش اطلاعات، شرط <Some Conditions> برقرار باشد، پیغام <Error Message> به نرم افزار منتقل میگردد و پس از آن دستور ROLLBACK TRAN اجرا میشود. این دستور باعث می شود تا رکورد دارای خطا و کلیه تغییرات داده شده قبل از وقوع خطا (در همان Transaction ) ثبت نشده و RollBack شود. و فقط اطلاعات تغییر داده شده ی پس از آن رکورد در بانک ذخیره شود.
سوال:
در متن تریگر فوق چه اصلاحی باید صورت پذیرد تا رکوردهای ثبت شده ی قبل از وقوع خطا RollBack نشوند؟ بعبارتی هنگام وقوع خطا فقط رکورد مشکل دار ثبت نشود و کلیه تغییرات قبل و بعد از آن ثبت شوند؟
یا حق...

AminSobati
شنبه 28 اردیبهشت 1387, 00:35 صبح
دوست عزیزم از Transaction Savepoints استفاده کنین

Arghavan_Reza
شنبه 28 اردیبهشت 1387, 09:18 صبح
با تشکر از استاد ثباتی؛
با رهنمایی شما مشکل به شکل زیر رفع شد:


CREATE TRIGGER [Table1_Update] ON [dbo].[Table1]
FOR INSERT, UPDATE
AS
IF ( <Some Conditions> )
BEGIN
RAISERROR ( <Error Message> , 16, 1)
ROLLBACK TRAN MySavePoint
END
SAVE TRAN MySavePoint