¿Cómo puedo obtener nombres de columna de una tabla en SQL Server?

Quiero consultar el nombre de todas las columnas de una tabla. Encontré cómo hacer esto en:

Pero también necesito saber: ¿Cómo se puede hacer esto en Microsoft SQL Server (2008 en mi caso)?

preguntado el 28 de junio de 09 a las 11:06

Como truco rápido y sucio, me gusta mucho hacer SELECT * FROM my_table WHERE 1=0 -

@bgusach: parece que el usuario quería los nombres de las columnas como filas en una tabla, pero para lo que estás intentando hacer, SELECT TOP 0 * FROM my_table es menos pulsaciones de teclas -

20 Respuestas

Puede obtener esta información y mucho, mucho más consultando el Vistas de esquema de información.

Esta consulta de muestra:

SELECT *
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = N'Customers'

Se puede hacer sobre todos estos objetos de base de datos:

Respondido el 18 de junio de 19 a las 22:06

¿Qué significa "N" en "= N'Customers '"? - Qbik

Qbik "N" si para manejar cadenas unicode como varchar en ANSI (32 bits) y nvarchar en unicode (64 bits) - eso salok

confirmado: funciona para MariaDB también ! :) (sin Nortwind. ...) - jave.web

SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = N'tableName'; esto funciona para mi - Pavol Travnik

Tuve que usar TABLE_SCHEMA = '?' AND TABLE_NAME = '?' ya que estoy en localhost y tengo varias tablas con el mismo nombre pero en diferentes bases de datos. - Akinuri

Puede utilizar el procedimiento almacenado sp_columns que devolvería información perteneciente a todas las columnas de una tabla determinada. Aquí se puede encontrar más información http://msdn.microsoft.com/en-us/library/ms176077.aspx

También puede hacerlo mediante una consulta SQL. Algo como esto debería ayudar:

SELECT * FROM sys.columns WHERE object_id = OBJECT_ID('dbo.yourTableName') 

O una variación sería:

SELECT   o.Name, c.Name
FROM     sys.columns c 
         JOIN sys.objects o ON o.object_id = c.object_id 
WHERE    o.type = 'U' 
ORDER BY o.Name, c.Name

Esto obtiene todas las columnas de todas las tablas, ordenadas por el nombre de la tabla y luego por el nombre de la columna.

Respondido el 15 de junio de 19 a las 23:06

select *
from INFORMATION_SCHEMA.COLUMNS
where TABLE_NAME='tableName'

Esto es mejor que obtener de sys.columns porque se nota DATA_TYPE directamente.

Respondido el 17 de junio de 16 a las 16:06

+1 ya que es ANSI SQL estándar (en.wikipedia.org/wiki/Information_schema) Otras respuestas como sys.objects no son estándar - Ingeniero invertido

Y si la tabla está en otro esquema (la variante "esquema" del servidor SQL) agregue AND TABLE_SCHEMA = 'schemaName' en la WHERE cláusula. - Johan

Muy útil y puedes agregar JOIN sys.types t on c.system_type_id = t.system_type_id y añade t.name en su declaración 'SELECT' para obtener el tipos junto al nombre de cada columna también. - Pac0

Puede usar el sp_help en SQL Server 2008.

sp_help <table_name>;

Atajo de teclado para el comando anterior: seleccione el nombre de la tabla (es decir, resáltelo) y presione ALT+F1.

Respondido el 15 de junio de 19 a las 23:06

este es mi atajo de teclado favorito de todos los tiempos. También asigno sp_helptext a Cntl-F1. ¡Juntos, estos dos atajos ahorran mucho tiempo! - Pablo Wehland

Al usar esta consulta, obtiene la respuesta:

select Column_name 
from Information_schema.columns 
where Table_name like 'table name'

respondido 26 mar '14, 14:03

Puede escribir esta consulta para obtener el nombre de la columna y todos los detalles sin usar INFORMATION_SCHEMA en MySql:

SHOW COLUMNS FROM database_Name.table_name;

Respondido el 19 de Septiembre de 16 a las 13:09

@Benjamin, porque esta pregunta es para SQL Server y esta respuesta es para MySql - Caimén

Puede ser que la mayoría de las personas que utilizan MySql se enfrenten a este problema. Y lo he mencionado. Estoy usando MySql. - Análisis Sachin

No importa si la mayoría de las personas que utilizan otros RDBMS tienen el mismo problema, es irrelevante para la pregunta original y empuja las respuestas relevantes más abajo. - demonio negro

Voto en contra porque la pregunta está dirigida específicamente a mssql: Lucas

--This is another variation used to document a large database for conversion (Edited to --remove static columns)

SELECT o.Name                   as Table_Name
     , c.Name                   as Field_Name
     , t.Name                   as Data_Type
     , t.length                 as Length_Size
     , t.prec                   as Precision_
FROM syscolumns c 
     INNER JOIN sysobjects o ON o.id = c.id
     LEFT JOIN  systypes t on t.xtype = c.xtype  
WHERE o.type = 'U' 
ORDER BY o.Name, c.Name

--In the left join, c.type is replaced by c.xtype to get varchar types

Respondido el 15 de junio de 19 a las 23:06

SELECT name
FROM sys.columns
WHERE object_id = OBJECT_ID('TABLE_NAME')

TABLE_NAME es tu mesa

Respondido el 15 de junio de 19 a las 23:06

SELECT column_name, data_type, character_maximum_length, table_name,ordinal_position, is_nullable 
FROM information_schema.COLUMNS WHERE table_name LIKE 'YOUR_TABLE_NAME'
ORDER BY ordinal_position

Respondido 23 Feb 12, 18:02

Puedes probar esto Esto da todos los nombres de las columnas con sus respectivos tipos de datos.

desc <TABLE NAME> ;

Respondido el 27 de junio de 16 a las 13:06

Sé que esto funciona en Oracle. Pero, ¿funciona esto en Microsft SQL? Gracias. - DxTx

Esta solución es la más simple, debería estar más arriba - Abhinav Mathur

Solo ejecuta este comando

EXEC sp_columns 'Your Table Name'

Respondido 19 Oct 18, 16:10

no está dando el resultado deseado - amit chauhan

A esta pregunta SO le falta el siguiente enfoque:

-- List down all columns of table 'Logging'
select * from sys.all_columns where object_id = OBJECT_ID('Logging')

Respondido el 27 de junio de 13 a las 20:06

Verificará si el dado el table is Mesa base.

SELECT 
    T.TABLE_NAME AS 'TABLE NAME',
    C.COLUMN_NAME AS 'COLUMN NAME'
FROM INFORMATION_SCHEMA.TABLES T
INNER JOIN INFORMATION_SCHEMA.COLUMNS C ON T.TABLE_NAME=C.TABLE_NAME
    WHERE   T.TABLE_TYPE='BASE TABLE'
            AND T.TABLE_NAME LIKE 'Your Table Name'

Respondido 08 Abr '13, 15:04

puedes usar esta consulta

SELECT *
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME like N'%[ColumnName]%' and TABLE_NAME = N'[TableName]'

Respondido el 30 de junio de 16 a las 08:06

SELECT c.Name 
FROM sys.columns c
JOIN sys.objects o ON o.object_id = c.object_id
WHERE o.object_id = OBJECT_ID('TABLE_NAME')
ORDER BY c.Name

respondido 09 mar '17, 21:03

Otra opción que podría decirse que es más intuitiva es:

SELECT [name] 
FROM sys.columns 
WHERE object_id = OBJECT_ID('[yourSchemaType].[yourTableName]') 

Esto le da todos los nombres de sus columnas en una sola columna. Si le interesan otros metadatos, puede cambiar y editar el SELECCIONAR DECLARACIÓN PARA SELECT *.

Respondido el 24 de Septiembre de 18 a las 18:09

Resumiendo las respuestas

Puedo ver muchas respuestas y formas diferentes de hacer esto, pero hay un problema en esto y ese es el objective.

Sí, el objetivo. Si quieres only know los nombres de columna que puede usar

SELECT * FROM my_table WHERE 1=0
or
SELECT TOP 0 * FROM my_table

Pero si quieres use esas columnas en alguna parte o simplemente decir manipulate Entonces, las consultas rápidas anteriores no serán de ninguna utilidad. Necesitas usar

SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = N'Customers'

una forma más de conocer algunas columnas específicas donde necesitamos algunas columnas similares

SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE COLUMN_NAME like N'%[ColumnName]%' and TABLE_NAME = N'[TableName]'

Respondido el 25 de diciembre de 19 a las 08:12

SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'name_of_your_table'

Respondido el 04 de diciembre de 15 a las 16:12

Otras respuestas son iguales. - Kiquenet

SELECT TOP (0) [toID]
      ,[sourceID]
      ,[name]
      ,[address]
  FROM [ReportDatabase].[Ticket].[To]

Simple y no requiere ninguna tabla del sistema

Respondido 06 Oct 19, 00:10

Algunos SQL que generan SQL:

DROP TABLE IF EXISTS test;
CREATE TABLE test (
  col001 INTEGER
, col002 INTEGER
, col003 INTEGER
, col004 INTEGER
, col005 INTEGER
, col006 INTEGER
, col007 INTEGER
, col008 INTEGER
, col009 INTEGER
, col010 INTEGER
)
;
INSERT INTO test(col001) VALUES(1);
INSERT INTO test(col002) VALUES(1);
INSERT INTO test(col005) VALUES(1);
INSERT INTO test(col009) VALUES(1);
INSERT INTO test VALUES (NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);

SELECT
  CASE ROW_NUMBER() OVER(ORDER BY ordinal_position)
  WHEN 1 THEN 
    'SELECT'+CHAR(10)+'  *'+CHAR(10)+'FROM test'
   +CHAR(10)+'WHERE '
  ELSE
    '   OR '
  END
+ column_name +' IS NOT NULL'
+ CASE ROW_NUMBER() OVER(ORDER BY ordinal_position DESC)
  WHEN 1 THEN 
    CHAR(10)+';'
  ELSE
    ''
  END
  FROM information_schema.columns
  WHERE table_schema='dbo'
    AND table_name = 'test'
ORDER BY
  ordinal_position;

-- the whole scenario. Works for 10 , will work for 100, too:

-- out -----------------------------------------------
-- out  SELECT
-- out   *
-- out FROM test
-- out WHERE col001 IS NOT NULL
-- out     OR col002 IS NOT NULL
-- out     OR col003 IS NOT NULL
-- out     OR col004 IS NOT NULL
-- out     OR col005 IS NOT NULL
-- out     OR col006 IS NOT NULL
-- out     OR col007 IS NOT NULL
-- out     OR col008 IS NOT NULL
-- out     OR col009 IS NOT NULL
-- out     OR col010 IS NOT NULL
-- out ;

Respondido 31 ago 20, 16:08

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.