English
Instant Developer Foundation Documentazione
  • Note di rilascio
  • Instant Developer Foundation
  • Versioni precedenti
  • Versione 9.5.4160
  • Correzioni

SQLSRV: Blocco THROW e generazione messaggi SqlServer

copia link

Descrizione 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.
Fino alla versione 9.0 (compresa) ogni volta che veniva cambiato il valore del primo parametro Instant Developer ricalcolava automaticamente il testo del commento della riga di codice utilizzando la descrizione della costante utilizzata come valore del primo parametro. A partire dalla versione 9.1 tale auto-aggiornamento del commento non veniva più effettuato.

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.
    • Effetti del malfunzionamento

      • La stored procedure viene correttamente inserita su database ma il testo del messaggio non viene correttamente fornito alla procedura sp_addmessage di SqlServer.

      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

      • 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.

Ultima modifica: 24/03/2021 / Validità: da 9.5.4160

Hai trovato utile l'articolo?

Grazie per il feedback!

Ti serve altro aiuto?

Consulta il Forum