如何从SQL Server表中获取列名?

1018

我想查询表中所有列的名称。我在以下链接中找到了如何在不同数据库中实现:

但我还需要知道:如何在我使用的 Microsoft SQL Server(2008)中实现此功能?


65
作为一种快速而简单的技巧,我非常喜欢执行SELECT * FROM my_table WHERE 1=0 - bgusach
27
似乎用户想要在表格中将列名作为行显示,但对于您试图做的事情来说,“SELECT TOP 0 * FROM my_table”更为简洁。 - Jake Wood
1
SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = '表名'; 仅更改表名 - Ahmad hassan
24个回答

1245

通过查询信息模式视图,您可以获取此信息和更多其他信息。

以下是示例查询:

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

可以应用于所有这些数据库对象:


49
“= N'Customers'” 中的“N”代表什么? - Qbik
32
Qbik "N" 用于处理 Unicode 字符串,类似于 ANSI(32位)中的 varchar 和 Unicode(64位)中的 nvarchar。 - thatsalok
9
确认:对于MariaDB也适用! :)(无需 Nortwind. ...) - jave.web
25
这段代码对我来说可行:SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = N'tableName'; - Pavol Travnik
2
如果您无法获取确切的表名,请使用类似于'TABLE_NAME like 'Customers''而不是'TABLE_NAME = N'Customers''的方式。 - vba
显示剩余5条评论

218

您可以使用存储过程 sp_columns 来获取指定表的所有列相关信息。更多信息请参考这里:http://msdn.microsoft.com/en-us/library/ms176077.aspx

您也可以通过 SQL 查询来实现。像这样的语句应该能够帮助您:

SELECT * FROM sys.columns WHERE object_id = OBJECT_ID('dbo.yourTableName') 

或者变体可以是:

SELECT   o.Name, c.Name
FROM     sys.columns c 
         JOIN sys.objects o ON o.object_id = c.object_id 
WHERE    o.type = 'U' 
ORDER BY o.Name, c.Name

这会获取所有表中的所有列,按表名和列名排序。


180
select *
from INFORMATION_SCHEMA.COLUMNS
where TABLE_NAME='tableName'

这比从sys.columns获取更好,因为它直接显示了DATA_TYPE


1
如果表位于另一个模式中(SQL Server的“schema”变体),则在WHERE子句中添加AND TABLE_SCHEMA ='schemaName' - Johan
1
非常有用,您可以添加 JOIN sys.types t on c.system_type_id = t.system_type_id 并在您的 'SELECT' 语句中添加 t.name 来获取每个列名旁边的 类型 - Pac0

63

您可以在 SQL Server 2008 中使用 sp_help

sp_help <table_name>;

上述命令的键盘快捷键:选择表名(即将其高亮显示),然后按下ALT+F1


3
这是我最喜欢的键盘快捷方式。我还将sp_helptext指定为 Cntl-F1。这两个快捷键一起可以节省很多时间! - Paul Wehland

53

在 MySql 中,您可以编写此查询以获取列名和所有详细信息,而无需使用 INFORMATION_SCHEMA:

SHOW COLUMNS FROM database_Name.table_name;

12
@Benjamin,因为这个问题是关于SQL Server的,而这个答案是针对MySql的。 - Caimen
2
可能大多数使用MySql的人都会遇到这个问题。我已经提到了。我正在使用MySql。 - Sachin Parse
10
其他关系型数据库系统的大多数用户是否遇到了同样的问题并不重要,这与原始问题无关,会将相关答案推得更远。 - Demonblack
5
我投反对票是因为这个问题特别针对 MSSQL。 - Lucas

51

通过使用此查询,您可以获得答案:

select Column_name 
from Information_schema.columns 
where Table_name like 'table name'

31
SELECT name
FROM sys.columns
WHERE object_id = OBJECT_ID('TABLE_NAME')

TABLE_NAME是您的表格


29
--This is another variation used to document a large database for conversion (Edited to --remove static columns)

SELECT o.Name                   as Table_Name
     , c.Name                   as Field_Name
     , t.Name                   as Data_Type
     , t.length                 as Length_Size
     , t.prec                   as Precision_
FROM syscolumns c 
     INNER JOIN sysobjects o ON o.id = c.id
     LEFT JOIN  systypes t on t.xtype = c.xtype  
WHERE o.type = 'U' 
ORDER BY o.Name, c.Name

--In the left join, c.type is replaced by c.xtype to get varchar types

20

你可以尝试这个。它会给出所有列名及其相应的数据类型。

desc <TABLE NAME> ;

18
SELECT column_name, data_type, character_maximum_length, table_name,ordinal_position, is_nullable 
FROM information_schema.COLUMNS WHERE table_name LIKE 'YOUR_TABLE_NAME'
ORDER BY ordinal_position

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接