2009-03-01 32 views

Respuesta

310

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' 
+5

¿Qué es el 'YourSchemaName'? – Drewdin

+11

'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

+2

No olvide el comando USE DatabaseName; de ​​lo contrario, puede buscar en el maestro o base de datos diferente de la que desea – Muflix

28

¿Algo como esto?

sp_columns @table_name=your table name 
11

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 
+1

Me gusta mucho. Sin embargo, me parece redundante la columna 'Objtype' :) – Joel

+1

¿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

+1

@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

1

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 
+0

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

1
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 
+2

¡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 –

84

Esta es la forma más fácil

exec sp_columns [tablename] 
+0

Esto es corto y simple, debería ser la respuesta correcta. Imagino que no existía cuando se formuló la pregunta originalmente :) – DanteTheSmith

2

¿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.

+3

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

+1

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

4

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%' 
8

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 
-3
set fmtonly on 
select * from yourTable 
0

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' 
4

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' 
0

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' 
2

USE[Database] SELECT TABLE_NAME,TABLE_SCHEMA,[Column_Name],[Data_type] FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA='dbo'

0
SELECT * 
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_NAME = N'TableName' 
0

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.

1

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"; } } 

} 
3

probar esto

select * from <tablename> where 1=2 

................................... ............

0
DECLARE @col NVARCHAR(MAX); 
SELECT @col= COALESCE(@col, '') + ',' + COLUMN_NAME 
FROM INFORMATION_SCHEMA.COLUMNS WHERE Table_name = 'MxLocations'; 
SELECT @col; 
Cuestiones relacionadas