0
プロシージャ内で動的SQLを実行中にSQL Serverがerror_procedureを実行できないのはなぜかと思います。シナリオ2のエラーメッセージでプロシージャ名を呼び出すことはできますか?エラー動的SQLの実行中にストアドプロシージャ名を取得する
シナリオ1:
CREATE PROCEDURE [dbo].[TEST_PROCEDURE]
AS
BEGIN
EXEC SELECT 1/0
END
GO
EXEC TEST_PROCEDURE
エラーメッセージ:
メッセージ8134、レベル16、状態1、プロシージャTEST_PROCEDURE、6行目
除算によってゼロにエラーが発生しました。
シナリオ2:
CREATE PROCEDURE [dbo].[TEST_PROCEDURE]
AS
BEGIN
EXEC('SELECT 1/0')
END
GO
EXEC TEST_PROCEDURE
エラーメッセージ:
メッセージ8134、レベル16、状態1、行1
除算によってゼロにエラーが発生しました。
プロシージャを作成するときに右の構文を持っていないので、ええと、あなたの最初のシナリオは、エラーを取得しています。 EXECはストアドプロシージャを実行します(ストアドプロシージャ "SELECT"はありません)。 EXEC()は、大括弧で囲まれたパラメータを実行します。プロシージャー名を含むカスタム・エラー・メッセージを出力するには、TRY CATCHステートメントをプロシージャーに入れ、CATCHにカスタム・エラー・メッセージを入れます。 – ZLK
お返事ありがとうございます!そうです、私はシナリオ2の手順を得るためにTRY CATCHメカニズムを使用できることを理解しました。 – 0070
本当に別の方法はありません。特定のエラー情報をキャプチャするには、キャッチを頼むしかありません。また、ストアドプロシージャ内で何かを実行している場合、SQLはエラーに関して誤解を招くような情報を与える可能性があります。例えば100行のコードがある場合は、101行目に 'EXEC( 'SELECT 1/0')'を追加すると、行1にエラーがあると言います(これは実行されているコードの最初の行です)。 – ZLK