آموزش SQL Transaction
بسم الله الرحمن الرحیم
آموزش SQL Transaction
در این بخش قصد دارم مدیریت تراکنش های اسکیوال را به صورت مختصر توضیح دهم
توسط متغییر Global، @@Error می توانیم شماره خطا را بازیابی نماییم اگر خطایی داشته باشیم مقدار این متغییر از صفر بزرگتر است در غیر این صورت مقدار آن صفر است و در صورتی که از این متغییر استفاده کنیم مجددا مقدار این متغییر صفر می گردد
همچنین جهت خواندن شماره خطا می توانیم از Error_Number() استفاده کنیم و جهت چاپ متن خطا از Error_Message استفاده می کنیم
جهت ایجاد یک خطا به صورت دستی می توانیم از RAISERROR استفاده کنیم
مثال
RAISERROR('خطایی رخ داده است',16,1)
به دلیل وجود کاراکترهای فارسی و انگلیسی جای متن خطا از ابتدا به انتها منتقل شده به همین دلیل تصویری در انتهای مطلب قراردادم که گویا ی موضوع باشد
عدد 16 محدوده خطا را مشخص می کند بهتر است همیشه از این عدد استفاده کند چون این عدد خطای ایجاد شده را به برنامه ی شما (مثلا سی شارپ) نیز ارسال می کند.
کاربرد این دستور برای مواردی است که شما می خواهید در صورت برقرار نشدن یک شرط دستورات خاتمه یابد مثلا برای جلوگیری از درج یک رکورد جدید در جدول کاربران با نام کاربری که قبلا ثبت شده است.
در مواردی که شما می خواهید در یک تراکنش تنها بخشی را خاتمه دهید ولی تراکنش همچنان ادامه داشته باشد کافی است که شما از دستور Save Point استفاده نمایید
مثال
BEGIN TRAN PARRNT
INSERT INTO USERS(userName,[password]) VALUES ('A','A')
PRINT 'INSERTED A'
BEGIN TRY
SAVE TRAN INSERT_PART
RAISERROR ('خطایی رخ داده است',16,1)
INSERT INTO USERS(userName,[password]) VALUES ('B','B')
PRINT 'INSERTED B'
END TRY
BEGIN CATCH
ROLLBACK TRAN INSERT_PART
END CATCH
INSERT INTO USERS(userName,[password]) VALUES ('C','C')
PRINT 'INSERTED C'
COMMIT TRAN PARENT