¿Cómo puedo obtener nombres de columna de una tabla en SQL Server?
Frecuentes
Visto 1,927 equipos
787
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)?
20 Respuestas
951
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:
- CHECK_CONSTRAINTS
- COLUMN_DOMAIN_USAGE
- COLUMN_PRIVILEGES
- COLUMNAS
- CONSTRAINT_COLUMN_USAGE
- CONSTRAINT_TABLE_USAGE
- DOMAIN_CONSTRAINTS
- DOMINIOS
- CLAVE_COLUMN_USO
- PARÁMETROS
- REFERENCIAL_CONSTRAINTS
- RUTINAS
- ROUTINE_COLUMNS
- ESQUEMA
- TABLE_CONSTRAINTS
- TABLE_PRIVILEGES
- TABLAS
- VISTA_COLUMN_USO
- VIEW_TABLE_USAGE
- PUNTOS DE VISTA
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
201
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
158
select *
from INFORMATION_SCHEMA.COLUMNS
where TABLE_NAME='tableName'
Esto es mejor que obtener de sys.columns
porque se nota DATA_TYPE
.
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 el capítulo respecto a 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
56
Puedes usar 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
46
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
41
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
27
--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
25
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
16
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
15
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
12
Solo ejecuta este comando
EXEC sp_columns 'Your Table Name'
Respondido 19 Oct 18, 16:10
no está dando el resultado deseado - amit chauhan
11
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
10
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
7
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
6
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
5
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
5
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
1
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
1
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
0
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 sql sql-server sql-server-2008 tsql or haz tu propia pregunta.
Como truco rápido y sucio, me gusta mucho hacer
SELECT * FROM my_table WHERE 1=0
- bgusach@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 - Jake Wood