Una de las buenas prácticas de SQL Server indica que debemos incluir explícitamente las columnas de una tabla en una sentencia SELECT. Es decir, evitar utilizar SELECT *. Encontrar la lista de columnas de una tabla es fácil. Usando el procedimiento almacenado sp_help podemos listar (entre otras cosas) las columnas. Solo que aparecen como un listado, una encima de la otra, y hay que copiarlas y colocarlas en el Query separadas por comas, en una o varias filas. Un truco también consiste en marcar en la ventana de consultas el nombre del objeto (tabla o vista) y presionar Alt+F1, que es la combinación de teclas de atajo para sp_help
El script que se muestra líneas más abajo sirve para listar las columnas en una sola cadena de caracteres, separadas por coma y enmarcadas entre corchetes para mejor identificación.
NOTA: Esto último es opcional. En el script hay una columna comentada que pueden alternar para que la lista de columnas aparezcan sin corchete
Nótese que el procedimiento almacenado se crea en la base de datos master y es marcado como procedimiento almacenado del sistema. De este modo puede ser utilizado desde cualquier base de datos de usuario
Por último, se puede crear un atajo para invocarlo por combinación de teclas. Sugiero escoger la combinación de teclas Ctrl+F1. Esto se logra de la siguiente manera:
-
En SQL Server Management Studio, en el menú Tools (Herramientas), seleccionar la opción Options (Opciones)
-
Seleccionar la opción Keyboard (Teclado) y luego la opción Query Shortcut (Accesos directos de consulta)
-
En el shortcut Ctrl+F1 indicar el procedimiento almacenado sp_helpcol, tal como se muestra en la siguiente imagen:
Aquí el código:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
USE master GO /* ---------------------------------------------------------------------------------------------------------------------- PROPOSITO | Obtener la lista de columnas de una tabla o vista, separadas por coma y entre corchetes [] ---------------------------------------------------------------------------------------------------------------------- PARÁMETRO DE ENTRADA | @ObjectName Es el nombre de la tabla o vista. Se debe incluir el esquema ---------------------------------------------------------------------------------------------------------------------- CREADO POR | Alberto De Rossi | dblearner.com ---------------------------------------------------------------------------------------------------------------------- */ ALTER PROCEDURE sp_helpcol @ObjectName sysname AS --Controla que el objeto exista y que sea tabla o vista IF NOT EXISTS(SELECT name FROM sys.objects WHERE object_id=OBJECT_ID(@ObjectName) and type in('U','V')) BEGIN DECLARE @Mensaje varchar(150) = 'El objeto '''+@ObjectName+''' no existe en la base de datos '''+DB_NAME(DB_ID())+''' o no es válido para esta operación.' RAISERROR (@Mensaje,16,1) RETURN END --Declara variable para lista de columnas DECLARE @ListCol varchar(max) = '' --Obtiene lista de columnas separadas por coma y enmarcada entre corchetes [] para el objeto indicado --Fuente = vista sys.columns select @ListCol = @ListCol + QUOTENAME(name) + ', ' FROM sys.columns where object_id=OBJECT_ID(@ObjectName ) --Retorna la lista de columnas eliminando la última coma de la derecha SELECT LEFT(@ListCol, LEN(@ListCol)-1) AS [Lista de Columnas] GO --Marcar el procesimiento como del sistema EXEC sp_ms_marksystemobject 'sp_helpcol' GO --TEST (para base de datos AdventureWorks2012) use AdventureWorks2012 go EXEC sp_helpcol 'Person.Person' GO |