PDA

View Full Version : سوال: عدم Rollback در Transaction



Mahdi Salami
پنج شنبه 28 مرداد 1389, 18:46 عصر
با سلام،
من یه SP نوشتم که توش به چند جدول تحت یک Transaction رکورد اضافه میکنم. بعد از هر عمل Insert من @@Error رو چک میکنم که خطایی اتفاق نیفتاده باشه و بعد میرم سراغ درج رکورد بعدی. با این حال در بعضی از موارد میبینم که SP خطا داده ولی عمل Rollback تمام جداول رو به حالت اولیه بر نگردونده! میشه راهنمایی کنید و بگید که چه کار کنم که اگر خطایی رخ داد، حتما عمل Rollback برای تمام جداول اتفاق بیفته.
با تشکر

AminSobati
جمعه 29 مرداد 1389, 01:18 صبح
سلام دوست عزیزم،
میتونین کد رو پست کنین؟

Mahdi Salami
شنبه 30 مرداد 1389, 07:22 صبح
با سلام
متن SP به صورت زیر هستش:

BEGINTRANSACTION

INSERT INTO t1

IF@@ERROR= 0
INSERT INTO t2

IF@@ERROR= 0
INSERT INTO t3

IF@@ERROR= 0
COMMIT TRANSACTION
ELSE
IF@@TRANCOUNT> 0
ROLLBACK TRANSACTION

Mahdi Salami
شنبه 30 مرداد 1389, 11:51 صبح
سلام
کسی نمیخواد یه کم کمک کنه؟

Mahdi Salami
شنبه 06 شهریور 1389, 16:06 عصر
سلام به همه دوستان و بزرگان
من یه سوال مطرح کردم و هنوز جوابی نگرفتم. میشه لطفا یه نفر به من کمکی بکنه؟!:خجالت:
با تشکر از توجه همه

AminSobati
شنبه 06 شهریور 1389, 21:06 عصر
دوست عزیزم شما بعد از هر IF حالت ELSE رو کنترل نمیکنین. ضمنا متغیر ERROR@@ به محض اینکه خوانده باشه، Reset میشه. ضمنا در نسخه 2005 به بعد میتونین از TRY...CATCH استفاده کنین

Mahdi Salami
سه شنبه 09 شهریور 1389, 15:04 عصر
دوست عزیزم شما بعد از هر IF حالت ELSE رو کنترل نمیکنین. ضمنا متغیر ERROR@@ به محض اینکه خوانده باشه، Reset میشه. ضمنا در نسخه 2005 به بعد میتونین از TRY...CATCH استفاده کنین

با سلام و تشکر از توجهتون
یعنی هر با که دستور If @@Error بررسی بشه، مقدارش Reset میشه؟
اگر Else بعد از هر دستور If بزارم مشکل حل میشه؟
با استفاده از Try..Cathc هم میتونم از Transaction استفاده کنم و در Catch اطلاعات رو Rollback کنم؟