提问



我想查询表的所有列的名称。我发现如何做到这一点:



  • 甲骨文

  • MySQL的

  • 的PostgreSQL



但我需要知道:如何在 Microsoft SQL Server (2008年,在我的情况下)中完成? [24]]]

最佳参考


您可以通过查询信息架构视图来获取此信息以及更多信息。[25]


此示例查询:


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


可以在所有这些DB对象上进行:



  • CHECK_CONSTRAINTS

  • COLUMN_DOMAIN_USAGE

  • COLUMN_PRIVILEGES

  • COLUMNS

  • CONSTRAINT_COLUMN_USAGE

  • CONSTRAINT_TABLE_USAGE

  • DOMAIN_CONSTRAINTS

  • DOMAINS

  • KEY_COLUMN_USAGE

  • 参数

  • REFERENTIAL_CONSTRAINTS

  • ROUTINES

  • ROUTINE_COLUMNS

  • SCHEMATA

  • TABLE_CONSTRAINTS

  • TABLE_PRIVILEGES

  • TABLES

  • VIEW_COLUMN_USAGE

  • VIEW_TABLE_USAGE

  • VIEWS


其它参考1


您可以使用存储过程sp_columns,它将返回与给定表的所有列有关的信息。更多信息可以在这里找到http://msdn.microsoft.com/en-us/library/ms176077.aspx [26] [27] [28] [29] [30] [31] [32] [33] [34] [35] [36] [37] [38] [39] [40] [41] [42] [43] [44] [45] [46]


您也可以通过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


这将获取所有表中的所有列,按表名排序,然后按列名排序。

其它参考2


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


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

其它参考3


您可以在SQL Server 2008中使用sp_help


sp_help <table_name>;


键盘快捷键为上述命令select table name(突出显示)并按 ALT + F1

其它参考4


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


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

其它参考5


- 这是用于记录大型数据库进行转换的另一种变体(编辑为 - 删除静态列)


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


- 在左连接中,c.type被c.xtype替换以获取varchar类型

其它参考6


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


SHOW COLUMNS FROM database_Name.table_name;

其它参考7


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

其它参考8


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


//TABLE_NAME是你的桌子

其它参考9


您可以尝试此操作。这会为所有列名称提供各自的数据类型。


desc <TABLE NAME> ;

其它参考10


这个SO问题缺少以下方法:


-- List down all columns of table 'Logging'
select * from sys.all_columns where object_id = OBJECT_ID('Logging')

其它参考11


只需运行此命令


EXEC sp_columns你的表名

其它参考12


它将检查给定的table是否是基表[47]


SELECT 
    T.TABLE_NAME AS 'TABLE NAME',
    C.COLUMN_NAME AS 'COLUMN NAME'
FROM INFORMATION_SCHEMA.TABLES T
INNER JOIN INFORMATION_SCHEMA.COLUMNS C ON T.TABLE_NAME=C.TABLE_NAME
    WHERE   T.TABLE_TYPE='BASE TABLE'
            AND T.TABLE_NAME LIKE 'Your Table Name'

其它参考13


SELECT c.Name 
FROM sys.columns c
JOIN sys.objects o ON o.object_id = c.object_id
WHERE o.object_id = OBJECT_ID('TABLE_NAME')
ORDER BY c.Name

其它参考14


你可以使用这个查询


SELECT *
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME like N'%[ColumnName]%' and TABLE_NAME = N'[TableName]'

其它参考15


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