2017-02-02 2 views
0

ストアドプロシージャから発生した例外を格納する際に問題があります。出力変数としてストアドプロシージャから例外を発生させる

たとえば、私は2つのストアドプロシージャP_AddP_GetAddを持っています。
P_Addは、 プロシージャP_GetAddP_Addを実行するように、ゼロで除算すると例外を戻します。
P_Addによって生成された例外をP_GetAddが実行されているコードに戻したいとします。
P_Add excetets提供されなかったパラメータがエラーです。 結果を得るのを助けてください。おかげさまで P_addストアドプロシージャを実行するとき

create procedure P_add 
(
    @ErrorMessage varchar (100) OUTPUT 
) 
as 
Declare @a int 
Declare @b int 
declare @c int 

set @a = 1 
set @b = 0 

Begin try 
    SET @c = @a/@b 
end try 
begin catch 
    SET @ErrorMessage = ERROR_MESSAGE(); 
End catch 

create procedure P_getADD 
(
@ErrorMessage1 varchar (100) OUTPUT 
) 
AS 

IF EXISTS (
     SELECT * 
     FROM sysobjects 
     WHERE id = object_id(N'[dbo].[P_add]') 
     AND OBJECTPROPERTY(id, N'IsProcedure') = 1 
     ) 
BEGIN 
    EXEC P_add @ErrorMessage = @ErrorMessage1 
END 

答えて

1

私は質問を理解仮定すると、あなたはoutputとして@ErrorMessage1をマークする必要があります。ソリューションを提供するための

CREATE PROCEDURE P_getADD 
(
    @ErrorMessage1 varchar (100) OUTPUT 
) 
AS 

IF EXISTS (
     SELECT * 
     FROM sysobjects 
     WHERE id = object_id(N'[dbo].[P_add]') 
     AND OBJECTPROPERTY(id, N'IsProcedure') = 1 
     ) 
BEGIN 
    EXEC P_add @ErrorMessage1 OUTPUT 
END 
+0

おかげで。しかし、RAISERROR()を使用して、親ストアドプロシージャにエラーをスローすることもできると思います。 –

+0

答えは投稿された質問です。この回答が正しいと判明した場合は、問題が解決されたことを他の人が知るように、受け入れ済みとしてマークしてください。より良い答えが出た場合は、投稿して受け入れてください。 –