2010-09-20 11 views
9

Sto lavorando su una base di codice SQL Server di grandi dimensioni, alcuni dei quali sono stati in sviluppo almeno da SQL 7 e forse prima.Questa sintassi RAISERROR non documentata è mai stata documentata e successivamente deprecata?

tutto il codebase, il metodo di generare un errore è quello di utilizzare la seguente sintassi che è, per quanto posso dire, non documentato

RAISERROR <error number> <error message> 

Il error number può essere qualsiasi valore maggiore di 13000; nessuna voce corrispondente deve esistere nella tabella sys.messages. error message può anche essere arbitrario.

Il seguente codice di esempio

raiserror 13000 'test error' 

produce il seguente output

Msg 13000, Level 16, State 1, Line 1 
test error 

Questo comportamento è lo stesso in SQL 2000, 2005 e 2008 (non ho ancora testato 2008 R2).

Stiamo tentando di standardizzare su un metodo supportato, ma la mia domanda è da dove viene questo comportamento, in primo luogo.

Presumo che questo deve essere documentato, comportamento supportato, ma copie di libri online per SQL 7 e precedenti sono difficili da trovare. Qualcuno sa quando è stato supportato o quando è stato deprecato, se mai?

Modifica Per chiarire, secondo il documentation, la sostenuta RAISERROR sintassi è

RAISERROR ({ msg_id | msg_str | @local_variable } 
    { ,severity ,state } 
    [ ,argument [ ,...n ] ]) 
    [ WITH option [ ,...n ] ] 

e un numero qualsiasi errore dell'utente che non è definito in sys.messages dovrebbe essere sollevata con un ID messaggio di errore di 50000

risposta

6

Questo appare come potrebbe essere un ritorno al passato alle origini di SQL Server in Sybase, la cui RAISERROR comando ha questa esatta sintassi:

Qualunque sia la sua origine, questa sintassi è deprecato a partire da SQL Server 2008 R2 e verranno rimossi in SQL Server 2012 (v 11. x). Vedere la pagina Deprecated Database Engine Features in SQL Server 2008 R2 per i dettagli.

0

Un messaggio di errore definito dall'utente è in realtà da 13000 a 2147483647.

Quindi il comportamento che stai descrivendo è corretto - stai sollevando un errore definito dall'utente.

+1

Concordato - ma la sintassi non è documentata e, secondo i documenti, qualsiasi errore utente non definito in 'sys.messages' deve essere generato con un codice di errore di 50000 –

Problemi correlati