الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

tran

بدأه cood في 13 يناير 2012 · 4 رد · 483 مشاهدة · في قواعد بيانات Microsoft SQL Server
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمه الله وبركاته

لدي مشكله فالكود التالي وهي انني عندما اعمل اكسكيوت لا تنتهي المعالجه.!!

Begin Tran TRN_1  
Update TABLE_1 set b = '1' 

SAVE TRANSACTION  savepoint1
Update TABLE_1 set s = '2' 

SAVE TRANSACTION  savepoint2
Update TABLE_1 set b = '3' 

IF @@error <> 0 --= some Error
BEGIN
    ROLLBACK TRANSACTION Savepoint1--ROLLBACK TRANSACTION Savepoint2
COMMIT TRANSACTION
END

else
BEGIN
COMMIT TRANSACTION
END

GO

-- SELECT * FROM TABLE_1

المشكله فالكود الثاني هي انني عندما ادخل القيمه 1 أو 2 فالباراميتر يعرض قيمه الترانزكشنين ؟؟؟؟

DECLARE @prmtr INT 
SELECT @prmtr=1


Begin Tran TRN_1 --WITH MARK 
Update TABLE_1 set B = 'TRN_1'--+B
--select @@trancount

Begin Tran TRN_2
Update TABLE_1 set S = 'TRN_2'--+B
--select @@trancount


IF  @prmtr=1
Begin
Commit Tran TRN_1
END

ELSE IF  @prmtr=2
Begin
Commit Tran TRN_2
END

ELSE
Begin
PRINT 'تراجع عن العمليات'
ROLLBACK TRAN  TRN_1
--select @@trancount
ROLLBACK TRAN  TRN_2
--select @@trancount
END
GO

--sp_lock  -- عرض التأمينات التي تم إجراؤها
GO

SELECT * FROM TABLE_1

:huh:

تم تعديل هذه المشاركة بواسطة cood في 13 يناير 2012 في 22:04

Just be you But upgrade yourself

#2

المشكله الاول ربما تكون لعدم اكتمال SAVE TRANSACTION savepoint1 اي يوجد خطاء في ما قبله لذلك لا ينتهي

#3

شكرا لك ARIMSOFT لكن SAVE TRANSACTION savepoint1 لا اعتقد ان لها ضرورة لكن سبب انها لا تنتهي غير واضح اين الخطا

يا اخواني مو معقول .....زي هذا السؤال مو صعب عليكم

:dry: بليز ممكن تفضولي نفسكم شوي

بشكل تاني حطرح المشكله

create table cuntusr ( cood   int ,cunt   int)
 go
---------------------------------------------
create proc tak (@cod as int , @cun as int)
as
begin
update cuntusr  set cunt=cunt-@cun where cood =@cod
end
go
create proc put (@cod as int , @cun as int)
as
begin
update cuntusr  set cunt=cunt+@cun where cood =@cod
end
go
---------------------------------------------


begin tran ta7uel

exec tak 101,5000 
save tran sa7b

exec but 102,5000 
save tran eda3--rollback tran ta7uel

---ساكتب احد هؤلاء حسب الحاجه 
commit tran ta7uel--عندما اريد ان اخصم من حساب واضيف على حساب
commit tran sa7b-- عندما اريد ان اخصم من حساب فقط
commit tran eda3-- عندما اريد ان اضيف على حساب فقط

الجدول

والاجراءات كلو تمام

لما استخدمت الترازكشن وقفت لما احدد نقاط الحفظ

بمعني وباختصار لما اعتمد الترازكشن باسمو الاساسي حتم عمليه سحب وايداع

ولما اختار النقطه الاولى سحب بس

ولما اختار الثالثه ايداع بس (لكنها ما تمشي زي ما انا مرتبها :sad: )

تم تعديل هذه المشاركة بواسطة cood في 14 يناير 2012 في 17:09

Just be you But upgrade yourself

#4

لا يوجد تفاعل :dry:

Just be you But upgrade yourself

#5

لا اعرف لم تستخدم named transaction وانما يكفي استخدام begin commit

begin tran 
update 1
update 2
update 3


commit 

OR 


Rollback

تم تعديل هذه المشاركة بواسطة TareqVB في 19 يناير 2012 في 11:04