你如何返回一个表的列名?

我如何返回使用SQL Server 2008的表的列名? 即一个表包含这些列 – ID,名称,地址,国家和我想要返回这些数据。

不知道2008年版本是否有更简单的方法。

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

这是最简单的方法

 exec sp_columns [tablename] 

像这样的东西?

 sp_columns @table_name=your table name 

一种方法是查询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 

这似乎比上述build议更容易一些,因为它使用OBJECT_ID()函数来定位表的ID。 具有该ID的任何列都是表格的一部分。

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

我通常使用类似的查询来查看我知道的列是否存在更新版本的一部分。 这是在where子句中加上{AND name ='YOUR_COLUMN'}的查询。

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

我用

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

以下看起来像上面第一个build议的查询,但有时您必须指定数据库才能使其工作。 请注意,查询也应该工作,而不指定TABLE_SCHEMA:

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

尝试这个

 select * from <tablename> where 1=2 

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

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

 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 

我不确定syscolumns.colid值是否与作为sp_columns一部分返回的'ORDINAL_POSITION'值相同,但是在后面我以这种方式使用它 – 希望我不会误导…

这里有一些我find的其他答案略有变化 – 我使用这个,因为表中列的“位置”或顺序在我的应用程序中很重要 – 我基本上需要知道“什么是列(n) ?

sp_columns返回了一大堆无关的东西,而且我比T-SQL函数更容易select,所以我走了这条路线:

 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 

您可以使用下面的代码来打印所有列名称; 您也可以修改代码以打印您喜欢的任何格式的其他细节

  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 

产量

 column1 column2 column3 column4 

要使用相同的代码以C#类的forms打印表和它的列名,请使用以下代码:

  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 

输出:

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

我只是使用一个像Martin Smith提到的查询,只是略短一点:

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

虽然@Gulzar Nazim的回答很好,但是在查询中包含数据库名称可能更容易,可以通过以下SQL来实现。

 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' 

为什么不试试这个:

右键单击表格 – >脚本表格 – >创build到 – >新查询编辑器窗口?

脚本中给出了整个列的列表。 复制它并根据需要使用这些字段。

由于SysColumns已弃用 ,请使用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将产生types的user_type_id = ID 。 这在数据库中是唯一的。 对于系统数据types: user_type_id = system_type_id

 set fmtonly on select * from yourTable