定期的な「印刷」ステートメントを含む SQL Server ジョブを実行しているので、ジョブ履歴を調べて何が起こったかを把握できます。しかし、出力は [SQLSTATE 01000] で雑然としています。この出力に収まる量には制限があるため、関心のある情報をできるだけ多くのスペースに収めたいと考えています。
「印刷」コマンドの [SQLSTATE 01000] 出力を抑制する方法はありますか?
定期的な「印刷」ステートメントを含む SQL Server ジョブを実行しているので、ジョブ履歴を調べて何が起こったかを把握できます。しかし、出力は [SQLSTATE 01000] で雑然としています。この出力に収まる量には制限があるため、関心のある情報をできるだけ多くのスペースに収めたいと考えています。
「印刷」コマンドの [SQLSTATE 01000] 出力を抑制する方法はありますか?
問題(申し訳ありませんが「機能」)は、SQLエージェントのPRINTコマンドにあります。この問題を克服するには、「出力」用に1つの列を持つテーブル変数を作成し、スクリプトを進めながらそれを入力し、ジョブの最後にテーブル変数からSELECTを入力します。SQL Agentを介して出力をファイルにパイプすると、ジョブのログが得られます。ジョブのどの時点でもエラーが発生した場合は、終了する前にテーブルの内容をダンプします。(通常、実行するコマンドを実行直前にテーブル変数に含めます)。ジョブの最後にすべてのPRINTステートメントを1つのSELECTステートメントに置き換えるだけで、これらの厄介な[SQLSTATE01000]サフィックスが削除されます。
すべての...くそー...行...
乾杯、ケン
あなたはおそらく運が悪いです。これは、PRINT ステートメントの通常の出力です。それらを抑える方法はないと思います。
出力から [SQLSTATE 01000] だけを削除したい場合、または [SQLSTATE 01000] を含むものを削除したい場合は、好ましくありません。したがって、ここに両方の方法があります。
Print replace(@PrintThis, '[SQLSTATE 01000]', '');
基本的に、これは [SQLSTATE 01000] を何も置き換えません。
次は CHARINDEX(expression1, expression1 [, start_location]) を使用し、expression2 で expression1 を検索し、見つかった場合はその開始位置を返します。検索は start_location から開始されます。
@result = CHARINDEX('[SQLSTATE 01000]', @PrintThis)
if (@result > 0)
Print @PrintThis
したがって、CHARINDEX < 0 の場合、文字列 [SQLSTATE 01000] は存在せず、出力されません
あなたがやろうとしていることを見逃した場合は、そのように返信してください。
これが役に立てば幸いです。
ブレット