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


当前回答

我不确定syscolumns。colid值与作为sp_columns一部分返回的'ORDINAL_POSITION'值相同,但在接下来的内容中,我将以这种方式使用它-希望我没有误导…

这是我发现的一些其他答案的轻微变化-我使用这个是因为表中列的“位置”或顺序在我的应用程序中很重要-我基本上需要知道“列(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 

其他回答

为什么不试试这个呢:

右键单击表->脚本表As ->创建到->新建查询编辑器 窗户吗?

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

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

像这样的东西?

sp_columns @table_name=your table name

这似乎比上面的建议要简单一些,因为它使用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 * from <tablename> where 1=2

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