Si tratta di un follow-up alla domanda Nested stored procedures containing TRY CATCH ROLLBACK pattern?stack di chiamate di registrazione di SQL Server quando la segnalazione degli errori
Nel blocco catch io uso una stored procedure per segnalare (reraise) l'errore con la lettura da ERROR_MESSAGE(), ERROR_PROCEDURE (), ERROR_LINE(), ecc. Come descritto in here ho anche un controllo in modo che possa determinare se l'errore è già stato riscritto (questo accade con stored procedure nidificate poiché le informazioni di errore vengono trasmesse attraverso ogni blocco TRY CATCH).
Quello che vorrei fare, direttamente in "ReportError", o indirettamente con il mio pattern (come descritto nella prima domanda), è registrare una traccia di stack - quindi quando ReportError rileva che sta recuperando un errore generato da stesso, aggiunge il prossimo livello dello stack al messaggio di errore. Questo mi aiuta a evitare i casi in cui vedo un messaggio di errore proveniente da una piccola procedura memorizzata, senza alcun modo di sapere come lo chiamano. Se provo a farlo direttamente in ReportError, fallisce, dal momento che l'errore di rethrown viene segnalato come proveniente da ReportError - solo l'errore originale è visibile.
C'è qualche modo per ReportError per eseguire una traccia di stack in SQL Server, senza passare un argomento a ogni singola stored procedure e senza mantenere manualmente tale traccia con la tabella #temp? Fondamentalmente voglio una chiamata ricorsiva di ERROR_PROCEDURE() e ERROR_LINE().
Ho appena aggiunto un post al mio blog che potrebbe aiutarti. Vi mostro come creare uno stack di chiamate in SQL Server. http://www.thecodepage.com/post/TIP-A-Call-Stack-in-SQL-Server.aspx –
@GabrielMcAdams Il link al tuo articolo è rotto. Qualche possibilità che tu possa aggiornarlo o pubblicare la soluzione come risposta qui? –