2010-09-20 7 views
9

Ich arbeite an einer großen SQL Server-Codebase, von denen einige seit mindestens SQL 7 und möglicherweise schon in Entwicklung sind.Wurde diese undokumentierte RAISERROR-Syntax jemals dokumentiert und später veraltet?

Während die Codebasis, wobei das Verfahren einen Fehler des Anhebens ist die folgende Syntax verwendet werden, die ist, so weit wie ich sagen kann, nicht dokumentierte

RAISERROR <error number> <error message> 

Die error number jeden Wert größer als 13000 sein kann; In der Tabelle sys.messages muss kein entsprechender Eintrag vorhanden sein. Die error message kann auch beliebig sein.

Der folgende Beispielcode

raiserror 13000 'test error' 

die folgende Ausgabe

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

Dieses Verhalten ist das gleiche in SQL 2000, 2005 und 2008 (die ich getestet habe nicht 2008 R2) erzeugt.

Wir werden versuchen, auf eine unterstützte Methode zu standardisieren, aber meine Frage ist, wo dieses Verhalten von Anfang an kam.

Ich nehme an, dies muss einmal dokumentiert worden sein, unterstützte Verhalten, aber Kopien von Büchern online für SQL 7 und vorher sind schwer zu finden. Weiß jemand, wann dies unterstützt wurde oder wann es veraltet war, wenn überhaupt?

Bearbeiten Um zu klären, nach den documentation, die unterstützten RAISERROR Syntax

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

Und jede Benutzer Fehlernummer, die nicht in sys.messages definiert ist, sollte mit einer Fehlermeldung ID 50000

angehoben werden,

Antwort

6

Das sieht aus wie es könnte eine Reminiszenz an SQL Server Ursprünge in Sybase sein, deren RAISERROR Befehl hat diese genaue Syntax:

Unabhängig von ihrer Herkunft, diese Syntax ist veraltet Ab SQL Server 2008 R2 und wird in SQL Server 2012 entfernt (v11. x). Einzelheiten finden Sie auf der Seite Deprecated Database Engine Features in SQL Server 2008 R2.

0

Eine benutzerdefinierte Fehlermeldung ist eigentlich von 13000 bis 2147483647.

Also das Verhalten, das Sie beschreiben, ist korrekt - Sie erhöhen einen benutzerdefinierten Fehler.

+1

Einverstanden - aber die Syntax ist nicht dokumentiert, und gemäß den Dokumenten sollte jeder Benutzerfehler, der nicht in 'sys.messages' definiert ist, mit einem Fehlercode von 50000 ausgelöst werden –

Verwandte Themen