martes, 8 de julio de 2014

Receta T-SQL No. 1-5: Renombrar las Columnas Generadas por una Consulta

Tabla de Contenido

0. Introducción
1. Problema
2. Solución
3. Discusión de la Solución
4. Práctica: Código T-SQL
5. Conclusiones
6. Glosario
7. Literatura & Enlaces

0. Introducción

A través de esta receta T-SQL aprenderemos a renombrar aquellas columnas que conforman los resultados de una consulta. Esto nos puede ser útil para especificar un nombre más legible para casos como la generación de un reporte en  el que la información generalmente se presenta a un usuario final del sistema información. Otra de las utilidades directas de esta característica de renombramiento es mantener la compatibilidad con aplicaciones basadas en datos que desde su diseño y construcción han definido nombres para determinados campos de un formulario.

1. Problema

Se requiere crear una consulta en la que se modifiquen los nombres de las columnas por unos personalizados y legibles para la construcción de un reporte de usuario final.

2. Solución

El lenguaje de consultas estructuras transaccional de SQL Server cuenta diferentes maneras tanto propias del estándar ISO y propietarias de SQL Server para poder renombrar una columna de una tabla que hace parte de una consulta. En resumen se puede citar los diferentes métodos de renombramiento:
  • NombreColumna AS "Nuevo Nombre" (estándar ISO)
  • NombreColumna "Nuevo Nombre" (estándar ISO)
  • NombreColumna [Nuevo Nombre] (propietario T-SQL)
  • "Nuevo nombre" = NombreColumna (propietario T-SQL)

3. Discusión de la Solución

Cuando ejecutamos una consulta como la siguiente 

SELECT BusinessEntityID, LoginID, NationalIDNumber
FROM HumanResources.Employee;

el nombre de las columnas del resultado de la consulta es exactamente a la lista separada por comas frente a la clausula SELECT:
Nombres reales de las columnas
Figura 1. Nombres reales de las columnas.
Notemos que en la sección del encabezado de la tabla de resultados se muestran los nombres de las columnas tal cual como fueron especificados en la clausula SELECT, es decir los nombres genuinos pertenecientes a la tabla HumanResources.Employee en la base de datos AdventureWorks2012:
  • BusinessEntityID
  • LoginID, y 
  • NationalIDNumber
Ahora si lo que deseamos es renombrar estos nombres de columnas por otros más legibles o compatibles con una aplicación de datos que hayamos creado en el pasado, podemos hacer uso de la clausula AS [2] u omitiendo esta clausula y a continuación especificar un alias para la columna que queremos renombrar.

Uso explícito de la clausula AS:

SELECT BusinessEntityID AS "Businss ID", LoginID AS "Login ID", NationalIDNumber AS "National ID"
FROM HumanResources.Employee;
Uso explícito de la clausula AS
Figura 2. Uso explícito de la clausula AS.

Uso implícito de la clausula AS:

SELECT BusinessEntityID "Businss ID", LoginID "Login ID", NationalIDNumber "National ID"
FROM HumanResources.Employee;
Uso explícito de la clausula AS
Figura 3. Uso implícito de la clausula AS.
También es posible usar la versión propietaria de T-SQL para los alias de las columnas. Así:

SELECT BusinessEntityID [Businss ID], LoginID [Login ID], NationalIDNumber [National ID]
FROM HumanResources.Employee;

o inclusive:

SELECT "Businss ID" = BusinessEntityID, "Login ID" = LoginID, "National ID" = NationalIDNumber
FROM HumanResources.Employee;

Los resultados serán exactamente los mismos a los mostrados en las Figuras 2 y 3.

Por otro lado, en el código que escribimos en nuestras aplicaciones de datos o en un reporte, hacemos uso explícito del nombre de la columna generada a partir de la consulta. Renombrar estas columnas resultantes nos puede ser de bastante utilidad cuando buscamos especificar nombres arbitrarios para los datos recuperados en una consulta y representarlos en formulario de la aplicación, o inclusive en un reporte para el usuario final de la aplicación.

En lo anterior también hincapié en [1]:
«...Well-chosen column aliases make ad hoc reports easier to comprehend.»
Una de las grandes ventajas de usar nombres de columnas personalizados es evitar la dependencia con los nombres reales de las columnas: cualquier cambio en el nombre de la columna en la tabla no afectaría el código escrito para la aplicación.

Una nota importante acerca del uso de las versiones propietarias para el renombramiento de columnas [1]:
«I prefer to follow the ISO standard, so I write enclosing quotes whenever I must deal with unusual characters in a column aliases. I also prefer the clarity of specifying the AS keyword. I avoid SQL Server's proprietary syntax in these cases.»

4. Práctica: Código T-SQL

Creemos la siguiente consulta para renombrar las columnas:
  • BusinessEntityID como ID "Empleado"
  • VacationHours como "Vacaciones"
  • SickLeaveHours como "Incapacidad"
La consulta quedará de la siguiente manera:

SELECT BusinessEntityID AS "ID Empleado",
VacationHours AS "Vacaciones",
SickLeaveHours AS "Tiempo Incapacidad"
FROM HumanResources.Employee;

Después de que ejecutemos esta consulta obtendremos el siguiente resultado:

5. Conclusiones

Renombrar una columna facilita ventajas como independencia de cambios en los nombres de las columnas en la tabla. Además, facilita la generación de nombres más intuitivos e legibles para un usuario final de reportes o aplicación. Para casos como este se recomienda el uso del estándar ISO en lugar de las versiones propietarias de T-SQL. En la próxima receta veremos que el uso de la clausula AS es apropiado para columnas calculadas.

6. Glosario

  • Alias
  • Clausula AS
  • Columna
  • Consulta
  • Estándar ISO
  • Renombrar
  • T-SQL

Literatura & Enlaces

[1]: SQL Server 2012 T-SQL Recipes - A Problem-Solucion Approach by Jason Brimhall, David Dye, Jonathan Gennick, Andy Roberts, and Wayne Sheffield. Copyright 2012 Jason Brimhall, David Dye, Jonathan Gennick, Andy Roberts, and Wayne Sheffield, 978-1-4302-4200-0.
[2]: Reserved Keywords - http://technet.microsoft.com/en-us/library/aa238507(v=SQL.80).aspx


J

No hay comentarios:

Publicar un comentario

Envíe sus comentarios, dudas, sugerencias, críticas. Gracias.