SQLSRV: Blocco THROW e generazione messaggi SqlServer
copia linkDescrizione del difetto
Errore nella generazione dei messaggi di errore collegati a righe di codice THROW contenute in stored procedure.
La riga di codice THROW in una stored procedure su database SqlServer si traduce in 2 righe di codice:
raiserror ([NUMMSG],16,1) with seterror
sp_addmessage @msgnum=[NUMMSG], @severity=16, @lang='us_english', @msgtext='[TXTMSG]', @replace='REPLACE' |
dove [NUMMSG] è il numero del messaggio di errore e corrisponde al numero utilizzato come primo parametro dell'istruzione THROW a cui viene aggiunto il valore 50000 e [TXTMSG] è il testo del messaggio dell'errore. Tale testo veniva calcolato da Instant Developer nel modo seguente:
- veniva utilizzato il valore del secondo parametro dell'istruzione THROW qualora presente;
- se il secondo parametro non era stato specificato Instant Developer utilizzava il commento associato alla riga di codice contenente l'istruzione THROW.
A partire dalla versione 9.5 il testo del messaggio viene calcolato nel modo seguente:
- se è stato valorizzato il secondo parametro dell'istruzione THROW viene utilizzata tale espressione come testo del messaggio;
- se non è stato valorizzato il secondo parameto e la costante utilizzata come primo parametro è stata commentata, ovvero non contiene la descrizione predefinita, viene utilizzata tale descrizione come testo del messaggio;
- se la costante non è stata documentata viene utilizzato il commento presente nella riga di codice contenente l'istruzione THROW.
- La stored procedure viene correttamente inserita su database ma il testo del messaggio non viene correttamente fornito alla procedura sp_addmessage di SqlServer.
- Malfunzionamento relativo alla segnalazione 000527-2010.
- La funzionalità è presente dalle primissime versioni di Instant Developer ed ha cessato di funzionare correttamente a partire dalla versione 9.1.
-
N.B: Qualora venga specificato un valore nel secondo parametro Instant Developer genera le seguenti righe di codice:
set @tmpmsg = '[TXTMSG]' raiserror ([NUMMSG],16,1,@tmpmsg) with seterror sp_addmessage @msgnum=[NUMMSG], @severity=16, @lang='us_english', @msgtext='%s', @replace='REPLACE' |Il testo '%s' presente nell'istruzione SQL sp_addmessage rappresenta la stringa di formattazione con cui occorre formattare il testo dell'errore che, nel caso specifico, viene fornito direttamente all'istruzione SQL raiserror.
Effetti del malfunzionamento
Soluzioni
Questo difetto è stato risolto nella versione 9.5. Usando le versioni precedenti è sufficiente inserire il testo dell'errore come parametro del blocco THROW. In alternativa è sufficiente inserire un commento alla riga di codice contenente il testo desiderato.
Funzionalità interessate
La creazione di stored procedure su database SqlServer.
Note
Ultima modifica: 24/03/2021 / Validità: da 9.5.4160