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


رفع ارور Msg 8134 در SQL Server

رفع ارور Msg 8134 در SQL Server
عملیاتهای ریاضی، مانند جمع و تفریق و غیره.. خیلی ساده و راحت در SQL Server امکان پذیر است. در اجرای اسکریپت هایی که عددی بر 0 تقسیم می شود، با خطای زیر مواجه می شوید.

نرم افزار سامانه مودیان راهکار



Msg 8134, Level 16, State 1, Line 7
Divide by zero error encountered.

رفع ارور Msg 8134 در SQL Server
برای جلوگیری از این خطا، چندین نوع کوئری را در ادامه بررسی می کنیم و با استفاده از آنها، شما می توانید شرایطی که نیاز است عددی بر 0 تقسیم شود و منجر به بروز خطا شود را کنترل کرده و از بروز خطا جلوگیری کنید.

Option 1: Check For 0 And Make It NULL

با استفاده از تابع NULLIF، می توانید در شرایطی که عددی تقسیم کننده 0 است، آن را به Null تغییر دهید و در نتیجه عددی که به NULL تقسیم شود، نتیجه NULL خواهد شد.

DECLARE @variable1 FLOAT,
@variable2 FLOAT;

SELECT @variable1 = 100,
@variable2 = 0;

SELECT @variable1 / NULLIF(@variable2, 0) Result;

رفع ارور Msg 8134 در SQL Server

Option 2: Handle The Exception

روش زیر برای مواقعی که عملیات ریاضی در داخل یک Stored Procedure انجام می شود، کاربردی خواهد بود. در SP زیر دو پارامتر وجود دارد که یکی برای گرفتن Result و دیگری برای رسیدن به خطا کاربرد دارد.

/** Create Stored procedure **/
CREATE PROCEDURE mtb_DivisionOperation
@Value1 FLOAT,
@Value2 FLOAT,
@Result FLOAT OUTPUT,
@Error NVARCHAR(MAX) OUTPUT
AS
BEGIN
BEGIN TRY

SET @Result = @Value1 / @Value2;

END TRY
BEGIN CATCH
SET @Error = 'Error Number: ' + CAST(ERROR_NUMBER() AS VARCHAR(10)) + '; ' + Char(10) +
'Error Severity: ' + CAST(ERROR_SEVERITY() AS VARCHAR(10)) + '; ' + Char(10) +
'Error State: ' + CAST(ERROR_STATE() AS VARCHAR(10)) + '; ' + Char(10) +
'Error Line: ' + CAST(ERROR_LINE() AS VARCHAR(10)) + '; ' + Char(10) +
'Error Message: ' + ERROR_MESSAGE()
END CATCH
END
GO

زمانی که تقسیم کننده در این عملیات 0 باشد، متغیر @Result، برابر با Null خواهد و در @ErrorMsg هم جزئیات خطا قرار می گیرد:

/** Execute Stored Procedure **/
DECLARE @ResultVal FLOAT
DECLARE @ErrorMsg NVARCHAR(MAX)

EXEC mtb_DivisionOperation
@Value1 = 100, @Value2 = 0,
@Result = @ResultVal OUTPUT, @Error = @ErrorMsg OUTPUT

SELECT @ResultVal AS 'Result'
SELECT @ErrorMsg AS 'Error Message'
GO

رفع ارور Msg 8134 در SQL Server
زمانیکه تقسیم کننده 0 نباشد، متغیر @Result حاوی مقدار و @ErrorMsg حاوی NULL خواهد بود.

/** Execute Stored Procedure **/
DECLARE @ResultVal FLOAT
DECLARE @ErrorMsg NVARCHAR(MAX)

EXEC mtb_DivisionOperation
@Value1 = 100, @Value2 = 3,
@Result = @ResultVal OUTPUT, @Error = @ErrorMsg OUTPUT

SELECT @ResultVal AS 'Result'
SELECT @ErrorMsg AS 'Error Message'
GO

خروجی اجرای کوئری فوق:

/** Results **/

Result
----------------------
33.3333333333333

(1 row affected)

Error Message
----------------------
NULL

(1 row affected)


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

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

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


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