呼び出し先のストアドでエラーが発生した場合の呼び出し元の行数を把握する方法はあるのでしょうか?
ストアドプロシージャのコーディングルールをまとめております。
ストアドプロシージャでエラーが発生したときに
どこでエラーが発生したのかが分かるようにスタックトレースを
作っているのですが、ストアドの呼び出しが
親子関係となっている場合に下記の問題があり、困っております。
課題
このストアドでエラーが発生した場合に、
親のどの呼び出し行でエラーが発生したかを知りたいのですが、
知る方法はあるのでしょうか?
ご存知の方、アドバイスをお願いいたします。
↓今のエラーメッセージ
メッセージ 50000、レベル 16、状態 1、プロシージャ Abe_Test02_01_Proc、行 51
メッセージ 50000、レベル 16、状態 1、プロシージャ Abe_Test02_02_Proc、行 66、Microsoft SQL Server Management Studio - クエリ
メッセージ 8134、レベル 16、状態 1、プロシージャ Abe_Test02_02_Proc、行 55、Microsoft SQL Server Management Studio - クエリ
0 除算エラーが発生しました。
↓本当はこうしたい
メッセージ 50000、レベル 16、状態 1、プロシージャ Abe_Test02_01_Proc、行 51
メッセージ 50000、レベル 16、状態 1、プロシージャ Abe_Test02_01_Proc、行 41
メッセージ 50000、レベル 16、状態 1、プロシージャ Abe_Test02_02_Proc、行 66、Microsoft SQL Server Management Studio - クエリ
メッセージ 8134、レベル 16、状態 1、プロシージャ Abe_Test02_02_Proc、行 55、Microsoft SQL Server Management Studio - クエリ
0 除算エラーが発生しました。
親のストアド
CREATE PROCEDURE [dbo].[Abe_Test02_01_Proc]
@Param1 nvarchar(max) = null,
@Param2 nvarchar(max) = null
AS
BEGIN TRY
SET NOCOUNT ON;
if @Param1 = N'Error1'
RAISERROR(N'パラメータが{0}です。',16,1,@Param1) --31行
declare @i int, @j int;
set @i = 100
set @j = 10;
if @Param1 = N'Error2'
set @j = 0;
--0除算
set @i = @i / @j; --39行
--子を呼ぶ
exec Abe_Test02_02_Proc @Param1, @Param2 --41行
return 0
END TRY
BEGIN CATCH
-- エラーメッセージ作成
DECLARE @errMsg nvarchar(max)
EXEC @errMsg = MakeErrorMessage
-- 例外を再スロー
RAISERROR(@errMsg, 16, 1) --51行
END CATCH
GO
子のストアド
CREATE PROCEDURE [dbo].[Abe_Test02_02_Proc]
@Param1 nvarchar(max) = null,
@Param2 nvarchar(max) = null
AS
BEGIN TRY
SET NOCOUNT ON;
if @Param1 = N'Error3'
RAISERROR(N'パラメータが{0}です。',16,1,@Param1) --47行
declare @i int, @j int;
set @i = 100
set @j = 10;
if @Param1 = N'Error4'
set @j = 0;
--0除算
set @i = @i / @j; --55行
exec Abe_Test02_03_Proc @Param1, @Param2
return 0
END TRY
BEGIN CATCH
-- エラーメッセージ作成
DECLARE @errMsg nvarchar(max)
EXEC @errMsg = MakeErrorMessage
-- 例外を再スロー
RAISERROR(@errMsg, 16, 1) --66行
END CATCH
GO
以上