2010-10-29 9 views
32

Estaba escribiendo una consulta en una tabla hoy en un cuadro de SQL Server 2000, y al escribir la consulta en el Analizador de consultas, para mi sorpresa noté que la palabra LineNo se convirtió en texto azul.¿Qué hace exactamente la palabra reservada "LineNo" de T-SQL?

Parece ser un reserved word de acuerdo con la documentación de MSDN, pero yo puedo encontrar ninguna información sobre ella, sólo una especulación que podría ser una palabra reservada legado que no hacer nada.

No tengo ningún problema para escapar del nombre del campo, pero tengo curiosidad: ¿alguien sabe para qué se usa realmente "LineNo" en T-SQL?

Respuesta

63

Bien, esto está completamente indocumentado, y tuve que resolverlo a través de prueba y error, pero establece el número de línea para el informe de errores. Por ejemplo:

LINENO 25 

SELECT * FROM NON_EXISTENT_TABLE 

Lo anterior le dará un mensaje de error, lo que indica un error en la línea 27 (en lugar de 3, si convierte la línea NUMLINEA a un comentario sola línea (por ejemplo, mediante un prefijo con dos guiones)):

Msg 208, Level 16, State 1, Line 27 
Invalid object name 'NON_EXISTENT_TABLE'. 

Esto se relaciona con mecanismos similares en los lenguajes de programación, tales como las directivas del preprocesador #line en Visual C++ y C# Visual (las cuales están documentadas, por cierto).

¿Cómo es útil, usted puede preguntar? Bueno, un uso de esto para ayudar a los generadores de código SQL que generan código desde un lenguaje de nivel superior (que SQL) y/o realizan expansión macro, vinculan líneas de código generadas a líneas de código de usuario.

P.S., No es una buena idea confiar en funciones no documentadas, especialmente cuando se trata de una base de datos.

Actualización: Esta explicación sigue siendo correcta hasta e incluyendo la versión actual de SQL Server, que en el momento de escribir esto es SQL Server 2008 R2 Actualización acumulativa 5 (10.50.1753.0).

+7

Eso es fantástico. Si pudiera, te daría 2 votos positivos más para una "buena respuesta". Me gustaría ** señalar que no funciona en el Analizador de consultas, pero funciona tal como se describe en un procedimiento almacenado. Debemos usar esta característica solo para bien, y no para atornillar con DBA ... – LittleBobbyTables

+8

No vamos a atornillar con DBA :-) Msg 208, nivel 16, estado 1, línea 2792874 –

+3

Todavía funciona en SQL 2012 :-) – Bridge

Cuestiones relacionadas