2010-09-20 4 views
9

Je travaille sur une grande base de code SQL Server, dont certaines sont en développement depuis au moins SQL 7 et peut-être avant.Cette syntaxe RAISERROR non documentée at-elle déjà été documentée et par la suite déconseillée?

Tout au long de la base de code, le procédé de déclencher une erreur consiste à utiliser la syntaxe suivante qui est, pour autant que je sache, sans papiers

RAISERROR <error number> <error message> 

Le error number peut être toute valeur supérieure à 13 000; Aucune entrée correspondante ne doit exister dans la table sys.messages. Le error message peut également être arbitraire.

Le code exemple suivant

raiserror 13000 'test error' 

produit la sortie suivante

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

Ce comportement est le même dans SQL 2000, 2005 et 2008 (je ne l'ai pas testé 2008 R2).

Nous allons essayer de standardiser une méthode supportée, mais ma question est de savoir d'où vient ce comportement en premier lieu.

Je suppose que cela doit avoir été documenté, le comportement pris en charge, mais des copies de livres en ligne pour SQL 7 et avant sont difficiles à trouver. Est-ce que quelqu'un sait quand cela a été soutenu ou quand il a été déprécié, si jamais?

Modifier Pour clarifier les choses, selon le documentation, la syntaxe RAISERROR pris en charge est

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

Et un numéro d'erreur utilisateur qui n'est pas défini dans sys.messages devrait être soulevée avec un identifiant de message d'erreur de 50000

Répondre

6

Cela ressemble à ce pourrait être un retour aux origines de SQL Server dans Sybase, dont la commande RAISERROR a cette syntaxe exacte:

Quelles que soient ses origines, cette syntaxe est obsolète à partir de SQL Server 2008 R2 et sera supprimé dans SQL Server 2012 (v 11. x). Voir la page Deprecated Database Engine Features in SQL Server 2008 R2 pour plus de détails.

0

Un message d'erreur défini par l'utilisateur est en fait de 13000 à 2147483647.Par conséquent, le comportement que vous décrivez est correct: vous déclenchez une erreur définie par l'utilisateur.

+1

D'accord - mais la syntaxe n'est pas documentée, et selon les docs, toute erreur d'utilisateur non définie dans 'sys.messages' devrait être augmentée avec un code d'erreur de 50000 –

Questions connexes