PDA

View Full Version : خبر: کنترل خطا و تراکنش و ثبت و نگهداری آن



mamizadeh
شنبه 18 آبان 1387, 00:42 صبح
-- ================================================== ========================================
-- _SPN
-- Author: Mamizadeh
-- Create date: 2008
-- ================================================== ========================================
CREATE PROCEDURE _SPN

AS
BEGIN
-- START TRANSACTION
BEGIN TRY
BEGIN TRANSACTION;
-- ================================================== ========================================
-- COMMANDS
-- ================================================== ========================================
COMMIT TRANSACTION;
SELECT
0 AS ERROR_FLAG,
'عملیات با موفقیت انجام شد' AS MESSAGE_FLAG
END TRY
-- WHEN GIVE A ERROR GO TO THIS SECTION
BEGIN CATCH
-- SAVE ERROR INFORMATION IN ERROR TABLE THAT CALL T_ERROR
DECLARE @SP_NAME NVARCHAR(50)
SET @SP_NAME = '_SPN'
DECLARE @ERRORID INT
SET @ERRORID = (SELECT MAX(ERRORID) FROM T_ERROR)
SET @ERRORID = (@ERRORID + 1)
INSERT INTO T_ERROR
(ERRORID,SP_NAME,ERROR_NUMBER,ERROR_SEVERITY,ERROR _STATE,ERROR_PROCEDURE,ERROR_LINE,ERROR_MESSAGE,DA TE)
VALUES
(@ERRORID,@SP_NAME,ERROR_NUMBER(),ERROR_SEVERITY() ,ERROR_STATE(),ERROR_PROCEDURE(),ERROR_LINE(),ERRO R_MESSAGE(),GETDATE())
-- TRANSACTION CONTROL FOR ROLLBACK
IF (XACT_STATE()) = -1
BEGIN
SELECT
-1 AS ERROR_FLAG,
ERROR_MESSAGE() AS MESSAGE_FLAG
ROLLBACK TRANSACTION;
END;
-- TRANSACTION CONTROL FRO COMMIT
IF (XACT_STATE()) = 1
BEGIN
SELECT
1 AS ERROR_FLAG,
ERROR_MESSAGE() AS MESSAGE_FLAG
COMMIT TRANSACTION;
END;
END CATCH;
END


نظر شما در رابطه با این کنترل تراکنش چیه درسته که این طوری استفاده کنم
و ثانیا به نظر اساتید
در کدام مورد باید تراکنش رعایت بشه
select
insert
update
delete
و یا تمام موارد
و سوال بعدی اینکه هزینه زمانی کنترل خطا و تراکنش در sql server چقدره زیاد بالا نیست ؟
با تشکر
یا علی

niloofar norouzi
شنبه 18 آبان 1387, 07:50 صبح
من فکر می کنم select نیازی به تراکنش نداره چون تغییری در پایگاه داده ایجاد نمی کنه
اما برای insert,update,delete باید از تراکنش استفاده کنی

AminSobati
شنبه 18 آبان 1387, 22:29 عصر
دوست عزیزم،
در CATCH عمل Rollback رو باید زودتر انجام بدین چون احتمال میدم ویرایشی که انجام میدین هم Rollback بشه.
دستور SELECT هم در اهداف خاصی در تراکنش قرار میگیره. الزاما نباید ویرایشی در کار باشه