T-SQLのエラー処理方針をまとめてみました。
1.更新の無いストアドはエラー処理をしない。
SELECTするだけのストアドは、エラー処理をせずにそのまま例外を上に投げると呼び出し側でTRY-CATCHしやすいです。
2.SQLServerエージェントから呼び出すストアドはusp_RethrowErrorを使う。
この場合はエラーの詳細ををジョブの履歴に残したい。usp_RethrowErrorを使って投げ直す例外のErrorMessageに、キャッチした例外の内容を展開するとジョブ履歴に出だせます。usp_RethrowErroはTRY−CATCH(SQLServer2005以降)のCATCHブロック内で使ってください。usp_RethrowErrorの詳細は↓を参照
http://blogs.wankuma.com/trapemiya/archive/2008/03/13/127556.aspx
3.更新のあるストアドのロールバック
単に前処理をロールバックしたいだけならSET XACT_ABORT ONを使うのが便利です。しかし、XACT_ABORTエラーを中断しないしロールバックもしないためTRY-CATCHとは共存しません。この場合は素直にCATCHブロックにROLLBACK TRANSACTIONを書くのがよいです。
まとめ
上記URL通りに下をテンプレにすればOK。
(※BEGIN TRANSACTIONはTRYの外だよね?)
BEGIN TRANSACTION BEGIN TRY --なんとかかんとか COMMIT TRANSACTION END TRY BEGIN CATCH ROLLBACK TRANSACTION EXEC usp_RethrowError; END CATCH
バッチ処理なんかでエラーの出たステップに応じてエラー処理を変えたい場合などは考慮していません。