¿Cómo puedo devolver los nombres de columna de una tabla con SQL Server 2008? es decir, una tabla contiene estas columnas: id, nombre, dirección, país y quiero devolverlos como datos.¿Cómo devuelves los nombres de las columnas de una tabla?
Respuesta
No estoy seguro si hay una manera más fácil en la versión 2008.
USE [Database Name]
SELECT COLUMN_NAME,*
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'YourTableName' AND TABLE_SCHEMA='YourSchemaName'
¿Algo como esto?
sp_columns @table_name=your table name
Un método consiste en consultar syscolumns:
select
syscolumns.name as [Column],
syscolumns.xusertype as [Type],
sysobjects.xtype as [Objtype]
from
sysobjects
inner join
syscolumns on sysobjects.id = syscolumns.id
where sysobjects.xtype = 'u'
and sysobjects.name = 'MyTableName'
order by syscolumns.name
Me gusta mucho. Sin embargo, me parece redundante la columna 'Objtype' :) – Joel
¿No sería mejor escribir por completo la unión (sysobjects para la unión interna syscolumns sc en so.id = sc.id)? Esto parece una respuesta perezosa a expensas del rendimiento. Podría estar equivocado ... – Losbear
@Losbear lo cambió PD: No es flojo, es solo código de hace 8 años. :) En los viejos tiempos (utilicé SQL Server a partir de la versión 4.2), solía escribir consultas SQL de esta manera. sin problemas de rendimiento – splattne
No estoy seguro de si el valor syscolumns.colid es el mismo que el valor 'ORDINAL_POSITION' devuelto como parte de sp_columns, pero en lo sigue lo estoy usando de esa manera - espero no estar desinformando ...
Aquí hay una pequeña variación de algunas de las otras respuestas que he encontrado - Utilizo esto porque la 'posición' u orden de la columna en la tabla es importante en mi aplicación, básicamente necesito saber '¿Qué es la columna (n) ¿llamado?'
sp_columns devuelve un montón de cosas extrañas, y yo soy más práctico con un grupo selecto de funciones de T-SQL, así que fui esta ruta:
select
syscolumns.name,
syscolumns.colid
from
sysobjects, syscolumns
where
sysobjects.id = syscolumns.id and
sysobjects.xtype = 'u' and
sysobjects.name = '<YOUR_TABLE>'
order by syscolumns.colid
Utilicé este método durante mucho tiempo, pero me desaconsejaron. De hecho, llegué al problema exacto que me dijeron que podría ... es más probable que las nuevas versiones de MSSQL cambien la sintaxis. Por ejemplo, solía ser sys.object y sys.columns en las versiones en las que utilicé esta técnica por primera vez. Supuestamente el esquema y los métodos de procedimientos almacenados son una prueba más en contra de esto ... no estoy seguro, pero hasta ahora todo va bien. – RosieC
CREATE PROCEDURE [dbo].[Usp_GetColumnName]
@TableName varchar(50)
AS
BEGIN
BEGIN
SET NOCOUNT ON
IF (@TableName IS NOT NULL)
select ORDINAL_POSITION OrderPosition,COLUMN_NAME ColumnName from information_schema.columns
where table_name [email protected]
order by ORDINAL_POSITION
END
END
¡Bienvenido a SO!Pero parece que esta pregunta ya obtuvo una respuesta satisfactoria hace unos tres años ... Además, al publicar el código, use {} para resaltarlo. Eche un vistazo a las preguntas frecuentes, tiene algo de información útil para comenzar aquí: http://stackoverflow.com/faq –
Esta es la forma más fácil
exec sp_columns [tablename]
Esto es corto y simple, debería ser la respuesta correcta. Imagino que no existía cuando se formuló la pregunta originalmente :) – DanteTheSmith
¿por qué no probar esto:
haga clic derecho sobre la pestaña le -> Tabla de scripts como -> Crear a -> Nuevo editor de consultas Ventana?
Toda la lista de columnas se proporciona en el script. Cópielo y use los campos según sea necesario.
El autor probablemente quería saber cómo obtener los nombres de las columnas de la tabla mediante programación para su uso en un procedimiento almacenado u otro script. – KLee1
La respuesta dice '" Quiero devolver estos como datos "', mientras que su respuesta obtendrá los valores, es probable que el OP desee los datos en tiempo de ejecución. – StuperUser
utilizo
SELECT st.NAME, sc.NAME, sc.system_type_id
FROM sys.tables st
INNER JOIN sys.columns sc ON st.object_id = sc.object_id
WHERE st.name LIKE '%Tablename%'
esto parece un poco más fácil que las sugerencias anteriores, ya que utiliza la función OBJECT_ID() para localizar el id de la tabla. Cualquier columna con esa identificación es parte de la tabla.
SELECT *
FROM syscolumns
WHERE id=OBJECT_ID('YOUR_TABLE')
Normalmente utilizo una consulta similar para ver si una columna que conozco pertenece a una versión más reciente. Es la misma consulta con la adición de {AND name = 'YOUR_COLUMN'} a la cláusula where.
IF EXISTS (
SELECT *
FROM syscolumns
WHERE id=OBJECT_ID('YOUR_TABLE')
AND name='YOUR_COLUMN'
)
BEGIN
PRINT 'Column found'
END
set fmtonly on
select * from yourTable
sólo tiene que utilizar una consulta como Martin Smith mencionó, sólo un poco más corto:
SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'YourTableName'
El siguiente parece ser como la primera consulta se sugirió anteriormente, pero en algún momento hay que especificar la base de datos para hacer que funcioneObserve que la consulta también debería funcionar sin especificar el TABLE_SCHEMA:
SELECT COLUMN_NAME
FROM YOUR_DB_NAME.INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'YOUR_TABLE_NAME' AND TABLE_SCHEMA = 'YOUR_DB_NAME'
Si bien la respuesta de @Gulzar Nazim es grande, es probable que sea más fácil para incluir el nombre base de datos en la consulta, lo cual podría lograrse mediante el siguiente código SQL .
SELECT COLUMN_NAME, *
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'you-table-name' AND TABLE_CATALOG='your-database-name'
USE[Database] SELECT TABLE_NAME,TABLE_SCHEMA,[Column_Name],[Data_type] FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA='dbo'
SELECT *
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = N'TableName'
Desde SysColumns is deprecated, utilice Sys.All_Columns
:
Select
ObjectName = Object_Name(Object_ID)
,T.Name
,C.*
,T.*
From
Sys.All_Columns C
Inner Join Sys.Types T On T.User_Type_Id = C.User_Type_Id
Where [Object_ID] = Object_ID('Sys.Server_Permissions')
--Order By Name Asc
Select * From Sys.Types
rendirá user_type_id = ID
del tipo. Esto es único dentro de la base de datos. Para tipos de datos del sistema: user_type_id = system_type_id
.
Puede usar el siguiente código para imprimir todos los nombres de columna; También puede modificar el código para imprimir otros datos en cualquier formato u como
declare @Result varchar(max)='
'
select @[email protected]+''+ColumnName+'
'
from
(
select
replace(col.name, ' ', '_') ColumnName,
column_id ColumnId
from sys.columns col
join sys.types typ on
col.system_type_id = typ.system_type_id AND col.user_type_id = typ.user_type_id
where object_id = object_id('tblPracticeTestSections')
) t
order by ColumnId
print @Result
salida
column1
column2
column3
column4
Para utilizar el mismo código para imprimir la tabla y su nombre de columna como C# clase de uso de la código de abajo:
declare @TableName sysname = '<EnterTableName>'
declare @Result varchar(max) = 'public class ' + @TableName + '
{'
select @Result = @Result + '
public static string ' + ColumnName + ' { get { return "'+ColumnName+'"; } }
'
from
(
select
replace(col.name, ' ', '_') ColumnName,
column_id ColumnId
from sys.columns col
join sys.types typ on
col.system_type_id = typ.system_type_id AND col.user_type_id = typ.user_type_id
where object_id = object_id(@TableName)
) t
order by ColumnId
set @Result = @Result + '
}'
print @Result
salida:
public class tblPracticeTestSections
{
public static string column1 { get { return "column1"; } }
public static string column2{ get { return "column2"; } }
public static string column3{ get { return "column3"; } }
public static string column4{ get { return "column4"; } }
}
probar esto
select * from <tablename> where 1=2
................................... ............
DECLARE @col NVARCHAR(MAX);
SELECT @col= COALESCE(@col, '') + ',' + COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS WHERE Table_name = 'MxLocations';
SELECT @col;
- 1. cómo obtener los nombres de las columnas de una tabla en ms access?
- 2. cómo obtener los nombres de las columnas de la clave principal para una tabla determinada?
- 3. ¿Cómo actualizar una tabla desde otra sin especificar los nombres de las columnas?
- 4. ¿Cómo tratar los espacios en los nombres de las columnas?
- 5. Consultar nombres de columnas de una tabla de otro usuario
- 6. Usando GetSchemaTable() para recuperar solo los nombres de las columnas
- 7. mysql obtener los nombres de las columnas de la tabla en orden alfabético
- 8. Devuelve todas las columnas de una tabla SQLite en Android
- 9. Obtener los nombres de las columnas de la tabla en mysql?
- 10. Renombrar las columnas de una tabla SQL con los valores de campo de una tabla
- 11. ¿Cómo puedo enumerar todas las columnas de una tabla?
- 12. ¿Cómo su búsqueda nombres de las columnas que contienen corchetes?
- 13. obtener las columnas de una tabla Temp en sybase
- 14. data.frame sin arruinar los nombres de las columnas
- 15. Obtener nombres de las columnas de una consulta sin datos
- 16. ¿Cómo ocultar las columnas de la tabla en jQuery?
- 17. ¿Cómo puedo evitar que Coldfusion convierta los nombres de las columnas de consulta en mayúsculas?
- 18. Cómo hacer tabla dinámica sin conocimiento de las columnas
- 19. ¿Cómo cuento columnas de una tabla
- 20. ¿Cómo cambio los nombres de las columnas de SQL Server en T-SQL?
- 21. Descripción de las columnas en una tabla de DB2
- 22. SQL: Inserte todos los registros de una tabla a otra tabla sin concretar las columnas
- 23. Caracteres máximos en etiquetas (nombres de tabla, columnas, etc.)
- 24. ¿Cómo centrar los contenidos de las celdas de una tabla LaTeX cuyas columnas tienen anchos fijos?
- 25. R: ¿cómo eliminar columnas en una tabla de datos?
- 26. Buscar todas las columnas de una tabla para un valor?
- 27. ¿Escribir declaraciones INSERT con valores al lado de los nombres de las columnas?
- 28. ¿Cómo obtener los nombres de las columnas junto con los resultados en php/mysql?
- 29. En vb.net, cómo obtener los nombres de columna de una tabla de datos
- 30. ¿Cómo selecciono todas las columnas de una tabla, más columnas adicionales como ROWNUM?
¿Qué es el 'YourSchemaName'? – Drewdin
'YourSchemaName' es el esquema de la tabla sobre la que realiza la consulta. Ejemplo: dbo.myTable, 'dbo' es el esquema al que 'myTable' pertenece. Los esquemas facilitan la asignación de permisos a una agrupación en lugar de cada tabla individualmente. Consulte también esta pregunta: http://stackoverflow.com/questions/1062075/why-do-table-names-in-sql-server-start-with-dbo – jmosesman
No olvide el comando USE DatabaseName; de lo contrario, puede buscar en el maestro o base de datos diferente de la que desea – Muflix