هذه الدوال والاجراءات تستخدم بشكل مهم لعمل تراجع لو حصل خطأ في أحد الإجراءات اثناء التنفيذ مثلا : تريد أن تعمل INSERT ثم DELETE ثم UPDATE وفجأة حصل خطأ في UPDATE حينها بشكل طبيعي لا تريد ان ترى اي تأثيرات على INSERT أو DELETE وتود ان تحل المشكلة على UPDATE وتعيد العملية مجددا ،،،،
هذا الكود هو الحل
DECLARE @TranCounter INT;
SET @TranCounter = @@TRANCOUNT;
IF @TranCounter > 0
SAVE TRANSACTION ProcedureSave;
ELSE
BEGIN TRANSACTION;
BEGIN TRY
-- INSERT
-- UPDATE
-- DELETE
-- SELECT
IF @TranCounter = 0
COMMIT TRANSACTION;
if @@Error = 0
select 1-- ok
END TRY
BEGIN CATCH
ROLLBACK TRANSACTION;
select ERROR_MESSAGE() as Error ,-1 -- Error
END CATCH
لا تنسونا من صالح الدعـــــــــــاء