DB: Errore aggiornamento Trigger
copia linkDescrizione del difetto
Era impossibile aggiornare il database qualora fosse presente un trigger che contenesse il blocco ERROR ed una variabile o una funzione come parametro. Il malfunzionamento si manifestava solo sul database SQL Server 2000 e SQL Server 2005 ed era dovuto al fatto che l'espressione Visual Code
ERROR [NumeroErrore]generava, oltre all'espressione SQL
raiserror ([NumeroErrore+50000],16,1) with seterroranche l'inserimento di un messaggio di testo tramite una chiamata alla stored procedure sp_addmessage
sp_addmessage @msgnum=[NumeroErrore+50000], @severity=16, @lang='us_english', @msgtext='[TestoErrore]', @replace='REPLACE'dove [TestoErrore] assumeva il valore dell'espressione collegata al blocco ERROR, se presente, o alla descrizione dello stesso blocco se l'espressione è assente.
Il malfunzionamento si verificava se al posto di una costante numerica come parametro del blocco di codice ERROR veniva utilizzata una variabile o una chiamata ad una funzione. A design-time Instant Developer non riusciva a calcolare il valore di tali oggetti e creava, in fase di aggiornamento del database, le chiamate alle procedure raiserror o sp_addmessage fornendo ad entrambe il valore 50000. Mentre la chiamata alla procedura raiserror accetta il valore 50000 la stored procedure sp_addmessage genera un errore se il numero del messaggio di errore è minore o uguale a 50001.
Effetti del malfunzionamento
- Veniva generato un errore durante l'aggiornamento del database.
Soluzioni
La versione 7.5 non genera errore il messaggio di errore in questo caso, evitando così l'errore.
E' comunque sufficiente utilizzare un valore costante come parametro del blocco ERROR. Qualora fosse stata utilizzata una variabile come parametro è sufficiente fornire alla variabile un valore predefinito diverso da 0. Se fosse stata utilizzata una funzione è sufficiente utilizzare comunque una variabile assegnandole il risultato della funzione.
Funzionalità interessate
L'uso del blocco di codice ERROR in un trigger con database SQL Server 2000 o SQL Server 2005.
Ultima modifica: 03/04/2020 / Validità: da 7.5.3400