技術的には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
メッセージ希望の方法で唯一の違いは、成功/失敗のメッセージです。
私はこれについてあまりよく分かりません(したがって、おそらくそれが最も効率的であるかどうかわかりませんが) 'try catch'を使用しようとすると... https://msdn.microsoft。 com/ja-us/library/ms175976.aspx – CodyMR
リンクから、各execステートメントのtry catchが必要なように見えます。 – user2202098
実際、上から少し下を見ると、エラーをどうやって取得するかが分かります。どの手順でエラーが発生したのかを確認する方法があります。だから理論的には、あなたの手続きの上に1つの大きな「キャッチ・トゥ・キャッチ」を持つことができます。再び、私はそれを使用していないので、これは私が推測している。 – CodyMR