2010-09-20 10 views
9

Estoy trabajando en una gran base de código de SQL Server, parte de la cual ha estado en desarrollo desde al menos SQL 7 y posiblemente antes.¿Se documentó esta sintaxis de RAISERROR sin documentar y posteriormente se anuló?

lo largo de la base de código, el método de elevar un error es utilizar la siguiente sintaxis, que es, en lo que puedo decir, indocumentado

RAISERROR <error number> <error message> 

El error number puede ser cualquier valor mayor que 13.000; no debe existir una entrada correspondiente en la tabla sys.messages. El error message también puede ser arbitrario.

El siguiente ejemplo de código

raiserror 13000 'test error' 

produce la siguiente salida

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

Este comportamiento es el mismo en SQL 2000, 2005 y 2008 (no he probado 2008 R2).

Vamos a intentar estandarizar en un método compatible, pero mi pregunta es de dónde vino este comportamiento en primer lugar.

Supongo que esto debe haber sido documentado, comportamiento soportado, pero las copias de libros en línea para SQL 7 y anteriores son difíciles de encontrar. ¿Alguien sabe cuándo esto fue compatible o cuándo fue desaprobado, si es que alguna vez?

Editar Para aclarar, de acuerdo con la documentation, la RAISERROR sintaxis soportada es

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

Y cualquier número de error de usuario que no se define en sys.messages debe elevarse con un id mensaje de error de 50.000

Respuesta

6

Esto parece que podría ser una vuelta a los orígenes de SQL Server en Sybase, cuya RAISERROR comando tiene esta sintaxis exacta:

Sea cual sea su origen, esta sintaxis está obsoleta a partir de SQL Server 2008 R2 y se eliminará en SQL Server 2012 (v 11. x). Consulte la página Deprecated Database Engine Features in SQL Server 2008 R2 para obtener más detalles.

0

Un mensaje de error definido por el usuario es en realidad de 13000 hasta 2147483647.

Entonces, el comportamiento que está describiendo es correcto: está provocando un error definido por el usuario.

+1

De acuerdo, pero la sintaxis no está documentada, y de acuerdo con los documentos, cualquier error de usuario no definido en 'sys.messages' debe plantearse con un código de error de 50000 –

Cuestiones relacionadas