我怎样才能从SQL Server中的表中获取列名?

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

  • 神谕
  • MySQL的
  • PostgreSQL的

但是我需要知道: 如何在Microsoft SQL Server (2008在我的情况下)这样做呢?

通过查询信息模式视图 ,您可以获得这些信息。

此示例查询:

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

可以通过所有这些数据库对象:

  • CHECK_CONSTRAINTS
  • COLUMN_DOMAIN_USAGE
  • COLUMN_PRIVILEGES
  • CONSTRAINT_COLUMN_USAGE
  • CONSTRAINT_TABLE_USAGE
  • DOMAIN_CONSTRAINTS
  • DOMAINS
  • KEY_COLUMN_USAGE
  • 参数
  • REFERENTIAL_CONSTRAINTS
  • 例程
  • ROUTINE_COLUMNS
  • SCHEMATA
  • TABLE_CONSTRAINTS
  • TABLE_PRIVILEGES
  • TABLES
  • VIEW_COLUMN_USAGE
  • VIEW_TABLE_USAGE
  • VIEWS

您可以使用存储过程sp_columns,它将返回有关给定表的所有列的信息。 更多信息可以在这里findhttp://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 

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

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

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

您可以在SQL Server 2008中使用sp_help

 sp_help <table_name>; 

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

通过使用这个查询,你可以得到答案:

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

– 这是另一个用于logging大型数据库转换的变体(编辑为 – 删除静态列)

 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.typereplace为c.xtype以获取varchartypes

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

 SHOW COLUMNS FROM database_Name.table_name; 
 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 
 SELECT name FROM sys.columns WHERE object_id = OBJECT_ID('TABLE_NAME') 

// TABLE_NAME是你的表

这个SO问题是缺less以下方法:

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

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

 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' 

只要运行这个命令

EXEC sp_columns'你的表名'

你可以试试这个。它给出了所有的列名和它们各自的数据types。

 desc <TABLE NAME> ; 

你可以使用这个查询

 SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE COLUMN_NAME like N'%[ColumnName]%' and TABLE_NAME = N'[TableName]' 
 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 
 SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'name_of_your_table'