Je travaille sur une vaste base de code SQL Server, dont une partie est en cours de développement depuis au moins SQL 7, voire avant.
Dans l'ensemble de la base de code, la méthode pour lever une erreur consiste à utiliser la syntaxe suivante qui, pour autant que je sache, n'est pas documentée
RAISERROR <error number> <error message>
En error number
peut être toute valeur supérieure à 13000 ; il n'est pas nécessaire qu'une entrée correspondante existe dans le fichier sys.messages
table. Les error message
peut également être arbitraire.
L'exemple de code suivant
raiserror 13000 'test error'
produit le résultat suivant
Msg 13000, Level 16, State 1, Line 1
test error
Ce comportement est le même dans SQL 2000, 2005 et 2008 (je n'ai pas testé 2008 R2).
Nous allons tenter de normaliser une méthode soutenue, mais ma question est de savoir d'où vient ce comportement.
Je suppose qu'il s'agissait autrefois d'un comportement documenté et supporté, mais il est difficile de trouver des copies de livres en ligne pour SQL 7 et les versions antérieures. Quelqu'un sait-il quand ce comportement a été pris en charge ou quand il a été abandonné, le cas échéant ?
Editer Pour clarifier, selon la la documentation , l'aide RAISERROR
La syntaxe est
RAISERROR ( { msg_id | msg_str | @local_variable }
{ ,severity ,state }
[ ,argument [ ,...n ] ] )
[ WITH option [ ,...n ] ]
Et tout numéro d'erreur de l'utilisateur qui n'est pas défini dans la rubrique sys.messages
devrait être levée avec un message d'erreur dont l'identifiant est 50000