¿Por qué RAISERROR está mal escrito? O no?


¿Por qué no se escribe RAISERROR RAISEERROR? ¿Dónde está la segunda E? Podría entender si fuera alguna restricción de longitud de palabra clave antigua, pero no esperaría que fuera un límite de nueve caracteres.

¿Es RAIS o RROR una palabra técnica tal que "raise-error" es solo una mala lectura? ¿Son sus orígenes (inmediatos) en un idioma diferente?

He buscado en Google, pero no he encontrado mucho sobre el tema.

 57
Author: Jason Kleban, 2010-05-12

5 answers

Interesante - Honestamente nunca me había dado cuenta de eso antes.

Sospecho que es un descuido temprano que nunca se corrigió, aunque estoy un poco sorprendido de que el soporte no se agregara más tarde para RAISEERROR, con la mala ortografía dejada sola para la compatibilidad.

Actualización: Aparentemente, incluso hay cierta confusión interna sobre lo que debería ser - Echa un vistazo esta solicitud de conexión, aunque MSFT no respondió a ella.

 11
Author: SqlRyan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-05-12 17:17:49

Aquí está una respuesta del blog MSDN de Jens Suessmeyer:

"¿Alguna vez te has preguntado por qué solo hay una "e" en Raiserror? Eso es de los viejos días de Sybase donde dos mismos caracteres se redujeron a uno solo: -) "

Http://blogs.msdn.com/b/jenss/archive/2009/05/11/getting-feedback-progress-from-batches-and-stored-procedures.aspx

 8
Author: Dan S.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-06-07 18:50:31

Yo tenía la misma pregunta que es por qué me tropecé 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 MSDN y es de color cian/azul en SSM
  • RAISEERROR-No tiene un enlace MSDN de lo que puedo encontrar ahora mismo y es de color magenta en los SSM

Crédito donde se debe crédito - la observación de color ya fue planteada por el usuario Sahuagin en los comentarios bajo la pregunta anterior.

¿Está utilizando SQL Server 2012?
Antes de seguir adelante creo que es justo decir que si está utilizando SQL Server 2012 o superior, NO UTILICE RAISERRROR! Deberías usar THROW .

Entonces, ¿cuál es la diferencia?
Puede usar RAISERROR (azul) en una sola línea sentencia, versus uso de RAISEERROR (magenta) que depende de estar contenido dentro de un bloque de código diferente que parece; 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.

Ejemplo RAISERROR (Un 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;

Esto es lo que pasa cuando voy a ejecutar este bloque de código.

Ahora, si solo elimina una " E " del código anterior, eso funciona bien. No proporcioné los resultados de ejecución, pero si abres SSMS y lo sueltas y ejecutas te garantizo que funcionará.

Ejemplo RAISEERROR (Dos Es - magenta)
Pasé demasiado tiempo tratando de averiguar cómo usar esta versión de la función y no puedo proporcionar un ejemplo donde esto realmente funcionará. Miré en el uso de CONVERSACIÓN, DIÁLOGO, DISTRIBUIDO o TRANSACCIÓN y no pude conseguir la sintaxis para trabajar. Larga historia corta, no te preocupes usted mismo con esta versión solo tiene que utilizar la versión E única. Para aquellos de ustedes que usan SQL Server 2012, esto ya no debería preocuparles de todos modos.

 6
Author: dyslexicanaboko,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:17:54

¿Por qué hay todavía un tipo de datos TIMESTAMP? soporte para versiones antiguas. Alguien Sybase persona hace mucho tiempo decidió hacer RAISERROR y no RAISEERROR, cuando Microsoft hizo un trato con Sybase continuaron la tendencia.

 5
Author: KM.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-05-12 17:24:03

Creo que es intencional porque en realidad es 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.

 3
Author: Joe,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-05-12 17:21:54