2016-09-09 11 views
1

私は複数の他のストアドプロシージャを呼び出すストアドプロシージャを持っています。ストアドプロシージャがエラーを検出した場合、終了するか、コードの残りの部分を実行し続けますか?ストアドプロシージャエラー処理のベストプラクティス

1つのセクションが失敗すると、失敗したストアドプロシージャが印刷され、次のセクションを実行し続けることを確実にする方法を教えてください。

例えば

"spInsert_1 fail" 
"spInsert_2 sucess" 

コード:

CREATE PROCEDURE [dbo].[spInsertAll] 
AS 
BEGIN 
    SET NOCOUNT ON; 

    exec dbo.spInsert_1 
    exec dbo.spInsert_2 
    exec dbo.spInsert_3 
END 
+1

私はこれについてあまりよく分かりません(したがって、おそらくそれが最も効率的であるかどうかわかりませんが) 'try catch'を使用しようとすると... https://msdn.microsoft。 com/ja-us/library/ms175976.aspx – CodyMR

+0

リンクから、各execステートメントのtry catchが必要なように見えます。 – user2202098

+1

実際、上から少し下を見ると、エラーをどうやって取得するかが分かります。どの手順でエラーが発生したのかを確認する方法があります。だから理論的には、あなたの手続きの上に1つの大きな「キャッチ・トゥ・キャッチ」を持つことができます。再び、私はそれを使用していないので、これは私が推測している。 – CodyMR

答えて

1

技術的にはSQL Serverは、デフォルトでは、あなたのためにそれを行うだろう - あなたは、よりエレガントな方法でやりたいことが。ここで方法

ストアドプロシージャは、1

SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 

CREATE PROCEDURE [dbo].[sp1] 
AS 
BEGIN 
    SET NOCOUNT ON; 
    BEGIN TRY 
    SELECT 1 
    PRINT 'SP1 is completed' 
    END TRY 
    BEGIN CATCH 
    PRINT 'SP 1 is Failed' 
    END CATCH' 
END 

ストアドプロシージャ2

CREATE PROCEDURE [dbo].[sp2] 
AS 
BEGIN 
    SET NOCOUNT ON; 
BEGIN TRY 
SELECT 1/0 
PRINT 'SP2 is completed' 
END TRY 
BEGIN CATCH 
PRINT 'SP 2 is Failed' 
END CATCH 
END 

ストアドプロシージャ3

CREATE PROCEDURE [dbo].[sp3] 
AS 
BEGIN 

    SET NOCOUNT ON; 
    BEGIN TRY 
    SELECT 1 
    PRINT 'SP 3 is completed' 
    END TRY 
    BEGIN CATCH 
    PRINT 'SP 3 is Failed' 
    END CATCH 
END 
012(エラーが発生します)あなたはまた、SQLストアドプロシージャの実行を行いますTRY-CATCHを使用していない場合でも、あなたは

SP 1 is completed 
SP 2 is Failed 
SP 3 is completed 

を主な手順を実行します

メインストアドプロシージャ

CREATE PROCEDURE dbo.Mainsp 
AS 
BEGIN 

    SET NOCOUNT ON; 

    EXEC dbo.sp1 
    EXEC dbo.sp2 
    EXEC dbo.sp3 
END 
GO 

メッセージ希望の方法で唯一の違いは、成功/失敗のメッセージです。

+0

ありがとう、ありがとうございます – user2202098

+0

すべてのspは同じバッチにありますので、あるspの失敗はバッチ全体を終了させる可能性があります。 – TheGameiswar

+0

@TheGameiswar 3つの 'EXEC'のすべてを' TRY CATCH 'し、 'ERROR_PROCEDURE () 'を使ってエラーがあったものを表示しますか? – CodyMR

関連する問題