miércoles, 25 de junio de 2014

Receta No. 1-3 en T-SQL: Recuperación de Todas las Columnas de una Tabla

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

En la receta anterior aprendimos cómo recuperar un conjunto específico de columnas de una tabla, lo que vamos a aprender ahora es a recuperar todas las columnas de una tabla. Usaremos el carácter asterisco (*), que es parte de los caracteres comodín del lenguaje declarativo T-SQL. ¡Empecemos!

1. Problema

Necesitamos recuperar todas las columnas (o campos) de una tabla o vista para evitar la enumeración de cada nombre de columna en la sentencia SELECT.

2. Solución

El lenguaje transaccional T-SQL cuenta con un conjunto de caracteres comodines, entre los que podemos enumerar:
  • *: omisión de lista específica de columnas; selección completa de todos los campos de una tabla o vista.
  • %: reemplazo de un conjunto de caracteres.
  • _: reemplazo de un único carácter.
Usaremos el primero de estos tres para solventar el problema de esta receta.

3. Discusión de la Solución

El carácter o comodín * (asterisco) retorna todas las columnas (o campos) de una una tabla o vista. Su uso consiste básicamente en:

SELECT FROM table_source

Creemos una consulta concreta para exponer mejor el concepto y su utilidad:

SELECT * FROM Person.Person;

Ejecución en Microsoft SQL Server 2024 Management Studio:
Selección de todas las columnas de una tabla con SELECT *...
Figura 1. Selección de todas las columnas de una tabla con SELECT *...
El uso de este modo de consulta sobre las columnas de una tabla no es recomendado, debido a que puede menoscabar el desempeño de la aplicación o de las consultas, además de generar inconsistencias en los resultados en futuras actualizaciones de las tablas.

Explícitamente en [1] nos advierten con dos recomendaciones:
  1. "If you write an application that used SELECT *, your application may expect the same columns (in the same order) from the query. If later on you add a new column to the underlying table or view, or if you reorder the table columns, you could break the calling application, because the new column in your result set is unexpected."
  2. "Using SELECT * can also negatively affect performance, as you may be returning more data than you need over the network, increasing the result set size and data retrieval operations in the SQL Server instance. For applications requiring thousands of transactions per second, the number of columns returned in the result set can have a nontrivial impact."
Prueba de desempeño:

Asumamos que desde la tabla Person.Person sólo necesitamos enumerar todos los registros, pero únicamente las columnas FirstName, LastName, y Title. La consulta nos queda de la siguiente manera:

SELECT FirstName, LastName, Title FROM Person.Person;

Al ejecutar esta consulta sobre SQL Server 2014 Management Studio, este nos mostrará en la región de resultados -Results- (esquina inferior derecha) el tiempo que ha tomado en ejecutarse la consulta. Para este caso ha sido inferior a 1 segundo.

Para el caso contrario, donde usamos la consulta:

SELECT * FROM Person.Person;

El tiempo que tarda la consulta en completarse es igual o superior a 1 segundo (ver Figura 1).

Asumamos que esta última consulta va a ser utilizada por cientos de miles de clientes, es evidente que el desempeño de la aplicación se degrade, o que el ancho de banda permitido se agote, o en un caso peor que el servidor SQL Server se ralentice.

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

Escribamos una consulta para recuperar todos los campos (columnas) de la tabla HumanResources.Employee:

SELECT * FROM HumanResources.Employee;

Ejecución consulta en Microsoft SQL Server 2024 Management Studio:
SELECT * FROM HumanResources.Employee
Figura 2. SELECT * FROM HumanResources.Employee.

4. Conclusiones

Demostré el uso del comodín o símbolo asterisco (*) para la selección de todo el conjunto de columnas pertenecientes a una tabla o columna. En recetas o artículos futuros aprenderemos cómo usar otros comodines (i.e., _, %). Además, desde la fuente [2] tomamos nota de las advertencias de inconsistencias y desempeño que pueden dar lugar el uso desmesurado o abusivo de la selección de todas las columnas de una tabla.

Glosario

  • Consulta
  • Desempeño
  • Query
  • Sentencia
  • SQL Server
  • 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]: SELECT (Transact-SQL) - http://msdn.microsoft.com/en-us/library/ms189499.aspx


S

No hay comentarios:

Publicar un comentario

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