+
Utilizzando @@ PROCID per tornare nome corretto di procedure, funzioni e trigger di SQL Server By: Andy Novick | Leggi i commenti (2) | Punte correlati: Altro> stored procedure Problema Quando inizio codifica una nuova procedura che spesso fanno l'errore di seguito rinominare la procedura e trascurando per aggiornare il codice di messaggi di errore e di registrazione che menziona il nome della stored procedure con la procedura. Come posso evitare un semplice errore come accada così come utilizzare un processo coerente? Soluzione SQL Server, dalla versione 2000 in poi, ha incluso la funzione @@ PROCID che restituisce l'id oggetto della procedura attualmente in esecuzione. La parola "procedimento" usata qui include stored procedure, funzioni definite dall'utente e trigger. Per ottenere il nome della procedura che ho sempre includere la riga: Poi, quando si fa riferimento il nome della procedura in un messaggio che uso il nome della variabile anziché difficile codificare il nome della procedura in questo modo: Come potete vedere qui sotto, visualizza il messaggio corretto: Ora, quando decido che la mia procedura immagazzinata ha bisogno di un nome migliore e ho rinominarlo, il nome della procedura nel messaggio rimane corretto. Questo visualizza ancora il messaggio corretto: Con la codifica con @@ PROCID non importa quante volte una procedura viene rinominato, sarà sempre tornare il nome corretto nel messaggio. Ho fatto questo una parte standard della mia pratica di codifica per evitare un errore molto comune e fuorviante. Capire cosa @@ PROCID tornerà C'è di più alla storia perché vi sono informazioni sul web che può trarre in inganno circa ciò che @@ PROCID può fare. Originariamente ho incontrato @@ PROCID durante la ricerca di un modo per ottenere il nome della procedura di avvio dall'interno di un trigger. Ci sono posti sul web che vi dirà che è possibile utilizzare @@ PROCID in un trigger per ottenere l'id oggetto della stored procedure che ha fatto il DML che ha avviato il grilletto e da @@ PROCID si ottiene il nome dell'oggetto. Questi siti sono sbagliate, almeno da quando SQL Server 2008 R2, e penso prima. @@ PROCID restituisce il object_id del trigger che esegue, non è la procedura che ha eseguito il DML. Questo script crea una tabella di esempio e di trigger per illustrare il suggerimento problematico: Ora diamo eseguire "updater_one" e vediamo cosa succede: I risultati sono: Proprio lì nel mezzo dei risultati di SQL ci dice che l'aggiornamento è stato registrato dal trigger. Questo non è informazioni particolarmente utili. Quello che volevamo sapere era quale procedura ha effettuato la modifica: updater_one o updater_two. L'unico modo che conosco per ottenere che è quello di avere le procedure di aggiornamento scrivono al tavolo my_data_log invece di utilizzare un trigger. Lo script successivo altera la procedura updater_one memorizzato per fare proprio questo: Cerchiamo di cancellare i dati non validi dalla tabella my_data_log ed eseguire "updater_one" di nuovo: Questa volta i risultati sono più soddisfacenti: Ora stiamo ricevendo il nome corretto della procedura. Se qualcuno dovesse venire avanti e rinominare la procedura, saremmo ancora ottenere il nome procedura corretta. Guarda: Il nome della procedura è corretta: Prossimi passi Utilizzare @@ PROCID quando si desidera ottenere il nome di una procedura, funzione o un trigger memorizzati da utilizzare in un messaggio Sempre essere scettici di qualsiasi cosa si legge in internet. Provalo prima di utilizzarlo. Ultimo aggiornamento: 2014/07/08 Circa l'autore Andy Novick è uno sviluppatore di SQL Server nella zona di Boston con 25 anni di dati e lo sviluppo di applicazioni esperienza.

No comments:
Post a Comment