Возможно более простой способ:
--------------------------------
--Worker process
--------------------------------
BEGIN TRANSACTION
--While in your loop or at each stage of the proc you can do this
INSERT INTO MyLoggingTable VALUES('My Message')
COMMIT
--------------------------------
--Reporting process
--------------------------------
SELECT * FROM MyLoggingTable WITH (NOLOCK)
NOLOCK позволяет вам читать ход процесса, даже если он записан в него внутри транзакции.
ОБРАТИТЕ ВНИМАНИЕ, что это позволяет вам читать данные «LIVE», но если рабочий процесс делает откат, тогда данные будут удалены.
Вы можете обойти это путем также регистрации в @MyTable, это выдержит откат, и вы сможете откатиться, а затем скопировать содержимое @MyTable в MyLoggingTable.