如何返回表的列名?

时间:2009-03-01 20:30:58

标签: sql sql-server tsql

如何使用SQL Server 2008返回表的列名?即一个表包含这些列 - id,name,address,country,我想将这些作为数据返回。

19 个答案:

答案 0 :(得分:362)

不确定2008版本是否有更简单的方法。

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

答案 1 :(得分:100)

这是最简单的方法

exec sp_columns [tablename]

答案 2 :(得分:31)

这样的东西?

sp_columns @table_name=your table name

答案 3 :(得分:13)

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

答案 4 :(得分:9)

这似乎比上面的建议容易一些,因为它使用 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

答案 5 :(得分:7)

试试这个

select * from <tablename> where 1=2

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

答案 6 :(得分:4)

我用

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

答案 7 :(得分:4)

以下似乎与上面的第一个建议查询类似,但有时您必须指定数据库才能使其工作。请注意,查询也应该可以在不指定TABLE_SCHEMA:

的情况下工作
SELECT COLUMN_NAME
FROM   YOUR_DB_NAME.INFORMATION_SCHEMA.COLUMNS
WHERE  TABLE_NAME = 'YOUR_TABLE_NAME' AND TABLE_SCHEMA = 'YOUR_DB_NAME'

答案 8 :(得分:2)

为什么不尝试这个:

  

右键点击表格 - &gt;脚本表为 - &gt;创建至 - &gt;新查询编辑器   窗口?

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

答案 9 :(得分:2)

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

答案 10 :(得分:1)

我不确定syscolumns.colid值是否与作为sp_columns的一部分返回的'ORDINAL_POSITION'值相同,但在下面我使用它的方式 - 希望我不会误导... < / p>

我发现的其他一些答案略有不同 - 我使用这个,因为表中列的'位置'或顺序在我的应用程序中很重要 - 我基本上需要知道'什么是列( n)叫?'

sp_columns返回了一大堆无关紧要的内容,而且我使用select而不是T-SQL函数更方便,所以我走了这条路:

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 

答案 11 :(得分: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 =@TableName
             order by ORDINAL_POSITION
    END
END

答案 12 :(得分:1)

您可以使用以下代码打印所有列名称;您也可以修改代码,以您喜欢的格式打印其他详细信息

    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#类,请使用以下代码:

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

 } 

答案 13 :(得分:0)

如果您使用的是postgresql,则在这种情况下,可能有多个模式具有相同名称的表,请应用以下查询

SELECT column_name, data_type 
FROM information_schema.columns
WHERE table_name = 'your_table_name' AND table_schema = 'your_schema_name’;

答案 14 :(得分:0)

SysColumns is deprecated起,请使用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将获得此类型的user_type_id = ID。这在数据库中是唯一的。对于系统数据类型:user_type_id = system_type_id

答案 15 :(得分:0)

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

答案 16 :(得分:0)

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

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

答案 17 :(得分:0)

我只是使用像马丁史密斯提到的查询,只是简短一点:

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

答案 18 :(得分:-3)

set fmtonly on
select * from yourTable