ストアド・プロシージャ:例外処理

7677 ワード

プログラミングの異常処理は重要ですが、もちろんSql文に格納されているプロセスの異常処理も重要です.明確な異常提示は問題の根源を迅速に見つけることができ、多くの時間を節約することができます.
次に、挿入データを例に、Sqlサーバのストレージ・プロシージャが異常をどのようにキャプチャするかを説明します.
1、環境
(1)データベースはSql Server 2008である.
(2)表(Course)構造は:
    No char(10)  primary key
    Name varchar(20)
    Comment varchar(50)
2、ストレージプロセス
データの挿入を例にとると、他はそのまま書けばいいです.  
プログラミング言語には異常なキャプチャと処理があり、SqlServer 2008でも同様である.
異常が発生する文にbegin try......end tryを加え、異常スナップ:begin catch......end catchを行えばよい.
エラーコードの詳細は簡単に見つかります.
コードは次のとおりです.
 1 Create proc sp_Insert_Course
2 @No char(10),
3 @Name varchar(20),
4 @Comment varchar(50),
5 @rtn int output
6 as
7 begin try
8 insert into Course values(@No,@Name,@Comment)
9 set @rtn=1
10 end try
11 begin catch
12 set @rtn=@@ERROR
13
14 --
15 --select ERROR_LINE() as Line,
16 -- ERROR_MESSAGE() as message1,
17 -- ERROR_NUMBER() as number,
18 -- ERROR_PROCEDURE() as proc1,
19 -- ERROR_SEVERITY() as severity,
20 -- ERROR_STATE() as state1
21 end catch

3、ストレージプロセスの実行
関連コードは次のとおりです.
1 declare
2 @rtn int
3 exec sp_Insert_Course '114',' ','',@rtn output
4 print @rtn

実行結果:
通常の場合、戻り値は1で、
「114」という番号のデータが既に存在する場合、ERROR_に戻ります.CODE:2627,
他の例外は対応するコードを返します
4、説明
プログラムに異常がある場合は、異常コードを返し、関連する処理を行えばよい.
SQL Serverの例外処理は、Oracleなどの他のデータベースとは少し異なりますが、基本的な考え方の差は少なく、最後にキャプチャしても例外が得られます. 
皆さんに役に立つことを願っています.