TimberLandChapelのTech Blog

TimberLandChapel が提供する技術Tips,思いつきメモ,雑感ブログです。
Office 互換リボン Release 1.0 をリリースしました。

購読

Books

INETAJ

Microsoft

SQL Server

TLC.com

クリエイティブ・コモンズ

情報処理関係官公庁

今期のアンケート

【SQL Server Tips】ステートメントのエラーコードで処理を分岐させる
この記事は@IT さんの Database Expert 会議室に投稿した記事のフォローアップです。
シナリオと要件
T-SQL ステートメントのエラー状態によって処理を分岐させ,その状態をイベントログに記録します。
今回は [RAISERROR],[IF~BEGIN~ELSE] を使用します。
[アドホックメッセージ] を利用する

[RAISERROR] の機能だけを利用して,メッセージを記録します。
この機能では SQL エラー番号 50000 としてログ記録されます。

@@ERROR の値によって,ログ記録を分岐させるクエリ
USE TestDB
 
DECLARE @DBID INT
DECLARE @DBNAME NVARCHAR(128)
 
SET @DBID = DB_ID()
SET @DBNAME = DB_NAME()
 
BACKUP DATABASE TESTDB TO DISK = 'E:\test.bak'
 
IF @@ERROR = 0
    BEGIN
        RAISERROR ('ID :%d, NAME:%s Backup success.', 1, 1, @DBID, @DBNAME) WITH LOG
    END
ELSE
    BEGIN
        RAISERROR ('ID :%d, NAME:%s Backup fail.', 1, 1, @DBID, @DBNAME) WITH LOG
    END
GO

事前に [sp_addmessage] でメッセージを定義しておく。

この機能では SQL エラー番号 やログ記録のオン/オフなどを事前に定義しておくことができます。

メッセージを事前定義するクエリ
EXEC sp_addmessage @msgnum = 50001, @severity =1,
    @msgtext ='ID :%d, NAME:%s Backup success.',@with_log=True
 
EXEC sp_addmessage @msgnum =50002, @severity =1,
    @msgtext ='ID :%d, NAME:%s Backup fail.',@with_log=True
GO
定義済みのメッセージを使用してログ記録するクエリ
USE TestDB
 
DECLARE @DBID INT
DECLARE @DBNAME NVARCHAR(128)
 
SET @DBID = DB_ID()
SET @DBNAME = DB_NAME()
 
BACKUP DATABASE TESTDB TO DISK = 'E:\test.bak'
 
IF @@ERROR = 0
    BEGIN
        RAISERROR (50001, 1, 1, @DBID, @DBNAME)
    END
ELSE
    BEGIN
        RAISERROR (50002, 1, 1, @DBID, @DBNAME)
    END
GO

この記事は Microsoft SQL Server 2000
Developer Edition Service Pack 4 に基づいて記述しています。

Published 2005年10月2日 8:40 投稿者 timberlandchapel

コメント

コメントはありません