Yo en mis sentencias TSQL uso el siguiente código
Cita: BEGIN TRY
BEGIN TRANSACTION
SENTENCIAS INSERT EN VARIAS TABLAS
UPDATES ....
COMMIT
END TRY
BEGIN CATCH
If @@TRANCOUNT > 0
ROLLBACK
DECLARE @ErrMsg nvarchar(4000), @ErrSeverity int
SELECT @ErrMsg = ERROR_MESSAGE(), @ErrSeverity = ERROR_SEVERITY()
RAISERROR(@ErrMsg, @ErrSeverity, 1)
End Catch
Si lo que deseas grabar en una tabla más información del error podrías obtener información de las variables ERROR_MESSAGE() y ERROR_SEVERITY(), tal como lo hago en mi código.