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


当前回答

由于SysColumns已弃用,请使用Sys. columns。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  

选择“* From Sys”。类型将产生user_type_id =类型的ID。这在数据库中是唯一的。系统数据类型:user_type_id = system_type_id。

其他回答

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

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

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

下面的查询看起来像上面建议的第一个查询,但有时您必须指定数据库才能使其工作。注意,查询在没有指定TABLE_SCHEMA的情况下也可以工作:

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

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

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