Como você retorna os nomes das colunas de uma tabela?

Como eu retornaria os nomes das colunas de uma tabela usando o SQL Server 2008? ou seja, uma tabela contém essas colunas – id, nome, endereço, país e eu quero retorná-los como dados.

Não tenho certeza se existe uma maneira mais fácil na versão de 2008.

USE [Database Name] SELECT COLUMN_NAME,* FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'YourTableName' AND TABLE_SCHEMA='YourSchemaName' 

Esta é a maneira mais fácil

 exec sp_columns [tablename] 

Algo assim?

 sp_columns @table_name=your table name 

Um método é 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 

Isso parece um pouco mais fácil do que as sugestões acima porque ele usa a function OBJECT_ID () para localizar o ID da tabela. Qualquer coluna com esse id faz parte da tabela.

 SELECT * FROM syscolumns WHERE id=OBJECT_ID('YOUR_TABLE') 

Eu costumo usar uma consulta semelhante para ver se uma coluna que eu sei é parte de uma versão mais recente está presente. É a mesma consulta com a adição de {AND name = ‘YOUR_COLUMN’} à cláusula where.

 IF EXISTS ( SELECT * FROM syscolumns WHERE id=OBJECT_ID('YOUR_TABLE') AND name='YOUR_COLUMN' ) BEGIN PRINT 'Column found' END 

tente isso

 select * from  where 1=2 

………………………………………..

eu uso

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

O seguinte parece ser como a primeira consulta sugerida acima, mas em algum momento é preciso especificar o database para que ele funcione. Observe que a consulta também deve funcionar sem especificar o TABLE_SCHEMA:

 SELECT COLUMN_NAME FROM YOUR_DB_NAME.INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'YOUR_TABLE_NAME' AND TABLE_SCHEMA = 'YOUR_DB_NAME' 

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

Por que não apenas tente isto:

clique com o botão direito do mouse na tabela -> Tabela de Script Como -> Criar para -> Nova Janela do Editor de Consultas?

A lista inteira de colunas é fornecida no script. Copie e use os campos conforme necessário.

 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 =@TableName order by ORDINAL_POSITION END END 

Não tenho certeza se o valor de syscolumns.colid é o mesmo que o valor de ‘ORDINAL_POSITION’ retornado como parte de sp_columns, mas a seguir, estou usando dessa forma – espero não estar informando mal …

Aqui está uma pequena variação em algumas das outras respostas que eu encontrei – eu uso isso porque a ‘posição’ ou a ordem da coluna na tabela é importante no meu aplicativo – eu basicamente preciso saber ‘O que é chamado de column (n) ?

sp_columns retorna um monte de coisas estranhas, e sou mais prático com funções select que T-SQL, então eu segui esse caminho:

 select syscolumns.name, syscolumns.colid from sysobjects, syscolumns where sysobjects.id = syscolumns.id and sysobjects.xtype = 'u' and sysobjects.name = '' order by syscolumns.colid 

Você pode usar o código abaixo para imprimir todos os nomes de coluna; Você também pode modificar o código para imprimir outros detalhes em qualquer formato u como

  declare @Result varchar(max)=' ' select @Result=@Result+''+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 

Saída

 column1 column2 column3 column4 

Para usar o mesmo código para imprimir a tabela e o nome da coluna como class C #, use o código abaixo:

  declare @TableName sysname = '' 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 

Saída:

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

Eu apenas uso uma consulta como Martin Smith mencionada, apenas um pouco mais curta:

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

Embora a resposta do @Gulzar Nazim seja ótima, é provavelmente mais fácil include o nome do database na consulta, o que poderia ser obtido pelo SQL a seguir.

 SELECT COLUMN_NAME, * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'you-table-name' AND TABLE_CATALOG='your-database-name' 
 SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = N'TableName' 

Como SysColumns está obsoleto , use 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 irá gerar user_type_id = ID do tipo. Isso é exclusivo no database. Para tipos de dados do sistema: user_type_id = system_type_id .

 DECLARE @col NVARCHAR(MAX); SELECT @col= COALESCE(@col, '') + ',' + COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE Table_name = 'MxLocations'; SELECT @col; 
 set fmtonly on select * from yourTable