TimberLandChapel's Tech Blog

TimberLandChapel provide Tips, tech note and scribbling.
Updated my site as English site for APAC users.
TLC.com .Metrix 4.0 Beta1 released

サイトの日本語化方法はこちら

Syndication

News

INETAJ

情報処理関係官公庁

SQL Server

TLC.com

Microsoft

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

http://www3.clustrmaps.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 by timberlandchapel
Filed under:

Comments

No Comments