0

SQL Server 2000でT-SQLからのエラーをログに記録するのに助けが必要です。トラップしたエラーをログに記録する必要がありますが、SQL ServerManagementStudioの前に置いていたのと同じ情報を取得するのに問題があります。

次のような引数の置換なしでメッセージを受け取ることができます。

SELECT MSG.description from master.dbo.sysmessages MSG
INNER JOIN sys.syslanguages LANG ON MSG.msglangID=LANG.msglangid
WHERE MSG.error=@err AND LANG.langid=@@LANGID

しかし、私はエラー引数を見つける方法を見つけられませんでした。見たい:

テーブルMYTABLE7の制約違反MYCONSTRAINT2

いいえ

テーブル%sの制約違反%s

グーグルは、管理者アクセスを必要とし、本番コードには適さないDBCCOUTPUTBUFFERを使用したエキゾチックなスキームのみを明らかにしました。引数を置き換えたエラーメッセージを受け取るにはどうすればよいですか?

4

4 に答える 4

2

.Net では、SQL サーバーからエラー メッセージ (およびprintまたはraiserrorからのすべての出力) を取得するのは、SqlConnection ( .FireInfoMessageEventOnUserErrors = True ) で 1 つのプロパティを設定し、接続の InfoMessage イベントを処理するのと同じくらい簡単です。.Net が受け取るデータは、SQL Server Management Studio の結果グリッドの[メッセージ] ウィンドウに表示されるものと一致します。

すべてのコードはイベントを処理する関数に入れられ、それを抽象化して、すべての接続が同じメソッドを指すようにすることができるため、作成時の 2 行のコードを除いて、アプリの残りの部分を変更する必要はありません。プロパティとイベントを設定するための新しい接続 (そして、それを抽象化したので、1 か所で行うだけで済みますよね? )

これは、 SQL Serverの決定的なエラー ガイドと私が考えるものへのリンクです。
http://www.sommarskog.se/error-handling-I.html

特定の状況では、SQL Server はエラーの後でも処理を続行します。エラーが発生するとどうなるかというラベルの付いた見出しを参照してください。前のリンクから。

于 2008-09-24T16:38:13.493 に答える
1

オンラインの書籍で Raiserror を探す (説明あり)

構文は次のようになります。

RAISERROR ( { msg_id | msg_str } { , severity , state } 
    [ , argument [ ,...n ] ] ) 
    [ WITH option [ ,...n ] ] 

エラー引数は次のとおりです。

d or I Signed integer 
o Unsigned octal 
p Pointer 
s String 
u Unsigned integer 
x or X Unsigned hexadecimal 

VB 以降のすべての言語には、これらをキャッチして適切なアクションを実行させる機能があります。

デイブ・J

于 2008-09-24T17:09:56.070 に答える
0

間もなくSQL2005にアップグレードする可能性はありますか?もしそうなら、あなたはおそらく彼らのTRY / CATCHモデルを活用して、あなたがやろうとしていることをより簡単に達成することができます。

キャッチで公開される変数は、エラーをスローするオブジェクト、行番号、エラーメッセージ、重大度などを提供します。そこから、ログに記録したり、電子メールを送信したりできます。

于 2008-09-24T16:25:22.963 に答える
0

FORMATMESSAGE (SQL Server 2000 にも存在します) を使用すると、上記のように sysmessages テンプレートからメッセージを最終的な形式に構築できます。

ただし、RAISERROR コマンド (エラーが発生したときにデータベース エンジン自体が内部的に使用するものとほとんど同じです) は、クライアントでトラップしてログに記録できる完全なテキストを既に送信しています。SSMS はクライアントであり、独自のメッセージを生成しません。すべてのメッセージはデータベース エンジンから送信されます。

ただし、T-SQL を使用して T-SQL エラーをログに記録したいと考えています。率直に言って、SQL Server 2000 ではできません。エラーが多すぎると、バッチやスコープが異常終了し、確実にログを記録できなくなります。

TRY/CATCH/ERROR_MESSAGE を使用するには、SQL Server 2005 を使用する必要があります。または、クライアントをトラップしてから、log4net などを使用して SQL Server に再度ログを記録します。

于 2009-06-08T04:37:58.003 に答える