12 votes

Cette syntaxe RAISERROR non documentée a-t-elle jamais été documentée et ensuite supprimée ?

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

9voto

Ed Harper Points 13289

On dirait que c'est pourrait de SQL Server à Sybase, dont le système de gestion de l'information a été mis en place par le ministère de l'économie et des finances. RAISERROR a cette syntaxe exacte :

Quelle que soit son origine, cette syntaxe est obsolète depuis SQL Server 2008 R2 et sera supprimée dans SQL Server 2012 (v 11. x ). Voir le Fonctionnalités du moteur de base de données obsolètes dans SQL Server 2008 R2 pour plus de détails.

0voto

Barry Points 18913

Un message d'erreur défini par l'utilisateur est en fait de 13000 jusqu'à 2147483647.

Le comportement que vous décrivez est donc correct - vous soulevez une erreur définie par l'utilisateur.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X