امتیاز موضوع:
  • 0 رأی - میانگین امتیازات: 0
  • 1
  • 2
  • 3
  • 4
  • 5
تراکنش در اس کیو ال
نویسنده پیام
The.Ghost غایب
مدیر بازنشسته
*****

ارسال‌ها: 461
موضوع‌ها: 201
تاریخ عضویت: مهر ۱۳۸۸

تشکرها : 674
( 354 تشکر در 158 ارسال )
ارسال: #1
Shy  تراکنش در اس کیو ال
با سلام
می خواهم بدونم چطوری میتونم یک تراکنش بنویسم در SQL که یک سری کار را انجام بده بعد COMMIT بشه بعد اگه اون یک سری کار با مشکل بر خود کرد دستور ROLLBACK اجرا بشه.

یعنی چطوری می تونم این دو دوستور بالا را باهم در sql server استفاده کنم که اگه دستور COMMIT با مشکل بر خورد دستور ROLLBACK اجرا بشه.

یعنی یک چیزی شبیه دستور Try  Except در دلفی.

من توی هر نمونه کدی که دیده بودم دستور COMMIT و ROLLBACK به صورت جدا در تراکنش ها توضیح داده بود.

فرض کنید من می خواهم در یک تراکنش بنویسم یک رکورد را حذف کن بعدش دستور COMMIT  باشه که این عمل اگه موافقعیت آمیز بود ذخیره شود و اگه مشکلی پیش آمد دستور ROLLBACK  اجرا بشه.

با تشکر از شما دوستان عزیز ممنون میشم اگه کمک کنید.  :():

Assembly Language 039

۱۹-اسفند-۱۳۹۴, ۱۶:۱۴:۱۶
ارسال‌ها
پاسخ
far_222000 آفلاین
مدير بخش ديتابيس
*****

ارسال‌ها: 955
موضوع‌ها: 68
تاریخ عضویت: شهریور ۱۳۸۴

تشکرها : 468
( 1249 تشکر در 422 ارسال )
ارسال: #2
RE: تراکنش در اس کیو ال
کد:
BEGIN TRY

   BEGIN TRANSACTION
       exec( @sqlHeader)
       exec(@sqlTotals)
       exec(@sqlLine)
   COMMIT
END TRY
BEGIN CATCH

   IF @@TRANCOUNT > 0
       ROLLBACK
END CATCH


در صورتی که بلاک TRY دچار مشکل شود، کل بلاک Stop شده و وارد بلاک CATCH میشود، چون ترنسکشن نا تمام مانده، RollBack میشود.

پارک24
مرجع خرید و فروش خودرو
۱۹-اسفند-۱۳۹۴, ۱۶:۴۹:۵۵
وب سایت ارسال‌ها
پاسخ
تشکر شده توسط : The.Ghost
The.Ghost غایب
مدیر بازنشسته
*****

ارسال‌ها: 461
موضوع‌ها: 201
تاریخ عضویت: مهر ۱۳۸۸

تشکرها : 674
( 354 تشکر در 158 ارسال )
ارسال: #3
RE: تراکنش در اس کیو ال
ممنون دوست عزیز فقط ...

اگه من چند تا تراکنش داشته باشم چی میشه؟؟؟ چون یک جایی خوندم با هر بار اجرای تراکنش یکی به مقدار TRANCOUNT اضافه میشه و با اجرای هر بار دستور ROLLBACK یکی کم میشه از این مقدار؟؟

الان این کدی که شما لطفا کردید و نوشتید برای تراکنش های تودر تو هم کار می کنه؟؟؟

با تشکر فراوان

Assembly Language 039

۱۹-اسفند-۱۳۹۴, ۱۸:۵۳:۴۳
ارسال‌ها
پاسخ
far_222000 آفلاین
مدير بخش ديتابيس
*****

ارسال‌ها: 955
موضوع‌ها: 68
تاریخ عضویت: شهریور ۱۳۸۴

تشکرها : 468
( 1249 تشکر در 422 ارسال )
ارسال: #4
RE: تراکنش در اس کیو ال
خب الان توی این دستوری که ارسال کردم، سه تا EXEC وجود داره، یعنی سه تا دستور مختلف داره اجرا میشه(البته توی این مثال، داره SP اجرا میکنه، شما میتونید به جاش از دستورات خودتون استفاده کنید)

اونجایی هم که نوشته بزرگتر از صفر، خب به تعداد دستوراتی که میخواین اجرا بشن، تغییرش بدین، مثلاً میخواین 5 تا دستور اجرا کنید، مینویسید 5

پارک24
مرجع خرید و فروش خودرو
۱۹-اسفند-۱۳۹۴, ۱۹:۰۵:۵۵
وب سایت ارسال‌ها
پاسخ
تشکر شده توسط : The.Ghost
The.Ghost غایب
مدیر بازنشسته
*****

ارسال‌ها: 461
موضوع‌ها: 201
تاریخ عضویت: مهر ۱۳۸۸

تشکرها : 674
( 354 تشکر در 158 ارسال )
ارسال: #5
RE: تراکنش در اس کیو ال
پس برای مثال من باید 5 تا دستور BEGIN TRANSACTION داخل یک بلوک تعریف کنم که هر کدام کار خاصی انجام میدن که به هم وابسته هستند و در آخر هم کد زیر بنویسم دیگه درسته؟


کد:
BEGIN CATCH
    IF @@TRANCOUNT > 5  
      ROLLBACK  
END CATCH

Assembly Language 039

۱۹-اسفند-۱۳۹۴, ۱۹:۱۶:۵۷
ارسال‌ها
پاسخ
The.Ghost غایب
مدیر بازنشسته
*****

ارسال‌ها: 461
موضوع‌ها: 201
تاریخ عضویت: مهر ۱۳۸۸

تشکرها : 674
( 354 تشکر در 158 ارسال )
ارسال: #6
RE: تراکنش در اس کیو ال
لطفا میشه بگید دقیقا کد زیر چه کاری انجام میده؟

کد:
IF @@TRANCOUNT > 0

Assembly Language 039

۱۹-اسفند-۱۳۹۴, ۱۹:۲۱:۲۲
ارسال‌ها
پاسخ
far_222000 آفلاین
مدير بخش ديتابيس
*****

ارسال‌ها: 955
موضوع‌ها: 68
تاریخ عضویت: شهریور ۱۳۸۴

تشکرها : 468
( 1249 تشکر در 422 ارسال )
ارسال: #7
RE: تراکنش در اس کیو ال
من تو پاسخ قبلی، مطلبی رو اشتباه گفتم که عذر خواهی میکنم

شما به ازای هر BEGIN TRANSACTION ای که باز میکنید، یکی به مقدار @@TRANSACTION اضافه میشه
همینطور هم برعکسش اتفاق میوفته زمانی که شما COMMIT کنید، پس به ازای هر COMMIT هم یکی از @@TRANSACTION کم میشه.

پس توی مثال بالا، شما هر چند تا دستور هم که بنویسید، در ابتدا @@TRANSACTION میشه یک، اگه همه دستورات اجرا بشن و مشکلی پیش نیاد، برنامه به خط COMMIT میرسه، پس @@TRANSACTION میشه صفر مجدداً. اما اگه توی دستوراتی که نوشتید، مشکلی ایجاد بشه، چون برنامه از بلاک میپره بیرون دیگه دستور COMMIT اجرا نمیشه، پس @@TRANSACTION همون 1 باقی میمونه، پس توی بلاک پایین، چون @@TRANSACTION بیشتر از صفر هست، عملیات ROLLBACK انجام میشه.

امیدوارم تونسته باشم منظورمو برسونم.

پارک24
مرجع خرید و فروش خودرو
۱۹-اسفند-۱۳۹۴, ۱۹:۳۵:۳۷
وب سایت ارسال‌ها
پاسخ
تشکر شده توسط : The.Ghost, omid_phoenix


پرش به انجمن:


کاربرانِ درحال بازدید از این موضوع: 1 مهمان

صفحه‌ی تماس | IranVig | بازگشت به بالا | | بایگانی | پیوند سایتی RSS