PDA

View Full Version : سوال: چگونگی انجام عملیات اتمیک



سمانه علوی فر
سه شنبه 23 آذر 1389, 10:16 صبح
مشکلی که دارم این است:
دوقطعه کد نوشتم که قطعه اول یک ردیف را از دیتا بیس حذف می کند و
قطعه دوم دیتا بسی با همان نام که در قطعه اول حذف کردیم را از بین می برد
این کد مربوط به حذف سال مالی می باشد که ابتدا جزئیات ان را پاک می کنیم و سپس خود دیتا بیس را حذف می کنیم
می خواهم این دوقطعه اتمیک شوند یعنی یا هردو موفقیت آمیز اجرا شوند یا هیچ کدام اجرا نشوند

خواهش می کنم راهنمایی کنید
متشکرم

tooraj_azizi_1035
سه شنبه 23 آذر 1389, 10:49 صبح
سلام،
شما باید کدتون را در بلوک BEGIN TRANSACTION قرار بدید. بعد در این بلوک یک بلوک دیگر به نام TRY/CATCH قرار دهید. در قسمت TRY دستورات خود را وارد کنید و در قسمت CATCH عملیات ROLLBACK را انجام دهید:
USE AdventureWorks2008R2;
GO
BEGIN TRANSACTION;

BEGIN TRY
-- Generate a constraint violation error.
DELETE FROM Production.Product
WHERE ProductID = 980;
END TRY
BEGIN CATCH
SELECT
ERROR_NUMBER() AS ErrorNumber
,ERROR_SEVERITY() AS ErrorSeverity
,ERROR_STATE() AS ErrorState
,ERROR_PROCEDURE() AS ErrorProcedure
,ERROR_LINE() AS ErrorLine
,ERROR_MESSAGE() AS ErrorMessage;

IF @@TRANCOUNT > 0
ROLLBACK TRANSACTION;
END CATCH;

IF @@TRANCOUNT > 0
COMMIT TRANSACTION;
GO

کد بالا یک مثال برای خود SQL Server هست برای #C شما TRANSACTION رو تو قسمت try/catch کدتون قرار بدید. یعنی در قسمت try شی به نام Transaction تعریف و دستورات رو به اون انتساب و در قسمت catch هم اون رو rollback کنید.

لینک: http://msdn.microsoft.com/en-us/library/ms188929.aspx