2010-05-12 30 views
56

¿Por qué no se escribe RAISERRORRAISEERROR? ¿Dónde está el segundo E? Pude entender si se trataba de una antigua restricción de longitud de palabra clave, pero no esperaba que fuera un límite de nueve caracteres.¿Por qué RAISERROR está mal escrito? ¿O no?

¿RAIS o RROR es una palabra técnica tal que "aumento de error" es solo una lectura errónea? ¿Son sus orígenes (inmediatos) en un idioma diferente?

He buscado en Google pero no encuentro mucho sobre el tema.

+8

Lo que realmente me confundía es que los colores SSIS 'RAISEERROR' rosados ​​y' RAISERROR' azules. –

Respuesta

10

Interesante - Honestamente, nunca lo había notado antes.

Sospecho que es una supervisión temprana que nunca se corrigió, aunque estoy un poco sorprendido de que el soporte no se haya agregado más tarde para RAISEERROR, dejando la ortografía incorrecta por compatibilidad.

Actualización: Aparently, incluso hay una confusión interna sobre lo que debería ser - Verifique this connect request, aunque MSFT no respondió.

+3

Es curioso que lo hayan cerrado como "no reproducible". Solo presiono el botón "Puedo reproducir esto" en la página Conectar. –

+3

Es curioso que lo hayan eliminado. – Lyra

5

¿por qué hay todavía un tipo de datos TIMESTAMP? soporte para versiones antiguas. Alguien persona de Sybase hace mucho tiempo decidió hacerlo RAISERROR y no RAISEERROR, cuando Microsoft made a deal with Sybase continuaron la tendencia.

+1

+1. Creo que te refieres a RAISEERROR y no a RAISEEROR; o) –

+0

@Ardman, sí lo arreglé, lo escribí tantas veces como 'RAISERROR' ¡No pude hacerlo como' RAISEERROR'! –

3

Creo que es intencional, ya que es realmente más fácil leer RAISERROR vs RAISEERROR. (ver también sp_helprotect para otro ejemplo), especialmente cuando no hay distinción basada en el caso.

Esto se remonta a la historia de Sybase.

4

que tenían la misma pregunta por lo que me encontré con este post. Por lo que puedo ver, en realidad hay una diferencia y la ortografía no es lo único diferente entre los dos casos. Estas dos funciones no son equivalentes debido al uso.

Enlaces y colores

  • RAISERROR - tiene un enlace de MSDN y es de color cian/azul en SSMS
  • RAISEERROR - No tiene un enlace de MSDN de lo que puedo encontrar en este momento y es de color magenta en SSMS

Crédito donde se debe crédito - la observación del color fue ra ya lo hizo el usuario Sahuagin en los comentarios de la pregunta anterior.

¿Está utilizando SQL Server 2012?
Antes de continuar, creo que es justo decir que si está utilizando SQL Server 2012 o superior, ¡NO USE RAISERRROR! Debería estar usando THROW.

¿Cuál es la diferencia?
Puede usar RAISERROR (azul) en una sola instrucción en línea, frente al uso de RAISEERROR (magenta) que depende de estar contenido dentro de un bloque de código diferente; basado en el error que se devuelve El error de sintaxis exacto es el siguiente:

Sintaxis incorrecta cerca de 'RAISEERROR'. Esperando CONVERSACIÓN, DIÁLOGO, DISTRIBUIDO O TRANSACCIÓN.

RAISERROR Ejemplo (Una E - azul)

DECLARE @foo varchar(200) 
SET @foo = '' 

IF NULLIF(@foo, '') IS NULL 
BEGIN 
    -- To fix this line, remove one "E" to read RAISERROR 
    RAISEERROR('Not enough Vespene Gas!', 16, 1); 

    RETURN -- This is required otherwise execution will continue! 
END 

-- You need the RETURN above or this will execute 
SELECT Critical_TSqlLine = 1; 

This is what happens when I execute this block of code.

Ahora si sólo quita una "E" en el código anterior, que funcionará muy bien. No proporcioné los resultados de la ejecución, pero si abre SSMS, lo coloca y lo ejecuta, le garantizo que funcionará.

RAISEERROR Ejemplo (Dos Es - magenta)
me pasó enteramente demasiado tiempo tratando de encontrar la manera de utilizar esta versión de la función y no puedo dar un ejemplo donde esto va a funcionar. Investigué usando CONVERSACIÓN, DIÁLOGO, DISTRIBUIDOS o TRANSACCIÓN y no pude conseguir que la sintaxis funcionara. Para resumir, no se preocupe por esta versión, solo use la versión E individual. Para aquellos de ustedes que usan SQL Server 2012, esto ya no debería preocuparlos de ninguna manera.

Cuestiones relacionadas