خوش آموز درخت تو گر بار دانش بگیرد، به زیر آوری چرخ نیلوفری را


استفاده از SET XACT_ABORT در SQL Server

استفاده از SET XACT_ABORT در SQL Server
با استفاده از SET XACT_ABORT در SQL Server می توانید هرگونه Transaction کاربران را کنترل کنید که در این مطلب به توضیح و ذکر مثال هایی برای آشنایی با نحوه کار آن خواهیم پرداخت.

نرم افزار سامانه مودیان راهکار
بصورت پیشفرض SET XACT_ABORT در وضعیت OFF قرار دارد. اگر SET XACT_ABORT در وضعیت ON باشد، در صورتی که یک Transaction منجر به run-time error شود، کل Transaction متوقف شده و کلا Transaction، Rollback می شود.


اگر SET XACT_ABORT در وضعیت پیشفرض، یعنی OFF باشد، فقط قسمتی از اسکریپت که منجربه خطا شده، از آن رد شده و سایر اسکریپت اجرا می شود. البته این به طور قطعی به این صورت نیست و این به ضدت خطا بستگی دارد. حتی ممکن است با اینکه SET XACT_ABORT در حالت OFF باشد ولی کل transaction در واقع Rollback شود.
SYNTAX به صورت زیر می باشد.

SET XACT_ABORT { ON | OFF }

خب، حالا با ذکر مثال، بهتر می توان کارایی SET XACT_ABORT را درک کرد.

SET XACT_ABORT OFF

در مثال زیر ابتدا یک جدول با نام Person ایجاد می کنیم که یک check constraint در آن قرار داده شده که برای سن کمتر از 18 سال می باشد. در ستون Age می توان سن بیشتر از 18 سال را وارد کرد ولی کمتر 18، منجر به خطا می شود. همانطور هم که گفته شد، SET XACT_ABORT به صورت پیشفرض در وضعیت OFF قرار دارد.

CREATE TABLE Person
(
ID INT IDENTITY(1,1) PRIMARY KEY,
Age INT CHECK (Age >18)
)

حالا مقادیر زیر را در جدول Person اضافه می کنیم:

BEGIN TRANSACTION
INSERT INTO Person VALUES (19)
INSERT INTO Person VALUES (22)
INSERT INTO Person VALUES (35)
INSERT INTO Person VALUES (17)
INSERT INTO Person VALUES (45)
INSERT INTO Person VALUES (28)
COMMIT TRANSACTION
GO

استفاده از SET XACT_ABORT در SQL Server
همانطور که مشاهده می کنید، همه رکوردها به غیر از رکورد 4، در جدول اضافه شده است چرا که شرط در ردیف 4، نقص شد و رکورد کمتر 18 برای اضافه شدن به جدول بود.
خب، با Select مقادیر جدول Person را نگاه کنید:

 SELECT * FROM Person

استفاده از SET XACT_ABORT در SQL Server
همانطور که مشاهده می کنید، فقط رکورد 4 به جدول اضافه نشد ولی باقی رکوردها با شرط مطابقت داشته و بدون مشکل اضافه شدند.

SET XACT_ABORT ON

خب، اگر SET XACTP_ABORT را در وضعیت ON قرار دهیم، چه اتفاقی رخ میدهد؟ قبل از شروه کار، جدول Person را Truncate کنید.

TRUNCATE TABLE Person

استفاده از SET XACT_ABORT در SQL Server
سپس رکوردهای فوق را دوباره به جدول Person اضافه کنید.

SET XACT_ABORT ON ;

BEGIN TRANSACTION
INSERT INTO Person VALUES (19)
INSERT INTO Person VALUES (22)
INSERT INTO Person VALUES (35)
INSERT INTO Person VALUES (17)
INSERT INTO Person VALUES (45)
INSERT INTO Person VALUES (28)
COMMIT TRANSACTION
SET XACT_ABORT OFF ;
GO

استفاده از SET XACT_ABORT در SQL Server
اما این بار که ارور رخ داده، به دلیل ON بودن XACT_ABORT، کلا این فرآیند Rollback می شود و چیزی به جدول اضافه نمی شود.

SELECT * FROM Person

استفاده از SET XACT_ABORT در SQL Server
شما با استفاده از Try.. catch می توانید در SQL Server مدیریت خطاها و استثناء را انجام دهید.


نمایش دیدگاه ها (0 دیدگاه)

دیدگاه خود را ثبت کنید:

انتخاب تصویر ویرایش حذف
توجه! حداکثر حجم مجاز برای تصویر 500 کیلوبایت می باشد.


دسته بندی مطالب خوش آموز