1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

TRY...CATCH (Transact-SQL) 確認

Last updated at Posted at 2018-10-26

概要

ストアドプロシージャの挙動を調べたので書く。
try catchがない場合とtry catchがある場合に、後続の処理がどうなるのかを書いた。
エラーになって次の処理をさせたくない場合は、@@ERROR で常にチェックするか。
try catchで処理の全体を囲むのが良い

サンプルプログラム

テーブル作成

table.sql
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[01_T](
	[TITLE] [nvarchar](10) NULL
) ON [PRIMARY]

try catchがない場合は一行目がエラーとなり、2行目が実行されてしまう。

no-trycatch.sql
ALTER PROCEDURE [01_INSERTPROC] AS

     -- 新規データ(処理は失敗する)←ここでエラーなっても
    INSERT [01_T](TITLE) VALUES('1234567890A')

     -- 新規データ(処理は成功する)←ここが実行される。
    INSERT [01_T](TITLE) VALUES('12345')

  RETURN @@ERROR

try catchがある場合、一行目がエラーなれば、処理が終了する。

trycatch.sql
ALTER PROCEDURE [01_INSERTPROC] AS

BEGIN TRY
     --新規データ(処理は失敗する)←ここでエラーなると下の処理は実行されない。
    INSERT [01_T](TITLE) VALUES('1234567890A')

     -- 新規データ(処理は成功する)
    INSERT [01_T](TITLE) VALUES('12345')

END TRY  
BEGIN CATCH 
    --エラーを出力
    SELECT   
        ERROR_NUMBER() AS ErrorNumber  
        ,ERROR_MESSAGE() AS ErrorMessage; 
	RETURN 9999
END CATCH 

  RETURN ERROR_NUMBER()

ストアドの実行

ストアドの実行.sql
DECLARE @RC int
EXECUTE @RC = [dbo].[01_InsertProc] 
select @RC
GO

参考サイト

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?