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

How can I get column names from a table in SQL Server?

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

  • 甲骨文公司
  • MySQL
  • 波斯特雷斯尔

但我需要知道:如何在Microsoft SQL Server中实现这一点(在我的例子中是2008年)?


您可以通过查询信息模式视图来获得这些信息以及更多信息。

此示例查询:

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

可以覆盖所有这些DB对象:

  • 检查限制
  • 列域用法
  • 列权限
  • 约束列用途
  • 约束表使用
  • 域约束
  • 领域
  • 键列用法
  • 参数
  • 参照约束
  • 日常工作
  • 例程栏
  • 图式
  • 表约束
  • 表权限
  • 桌子
  • 查看栏用法
  • 查看表格使用情况
  • 意见


您可以使用存储过程sp_columns,它将返回与给定表的所有列相关的信息。有关详细信息,请访问http://msdn.microsoft.com/en-us/library/ms176077.aspx

您也可以通过SQL查询来实现。像这样的事情应该有帮助-

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

或者变化是:

1
2
3
4
5
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

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


1
2
3
SELECT *
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME='tableName'

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


您可以在SQL Server 2008中使用sp_help

1
sp_help <table_name>;

上述命令的键盘快捷键:选择表名(即突出显示表名),然后按alt+f1


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

1
2
3
SELECT Column_name
FROM Information_schema.columns
WHERE TABLE_NAME LIKE 'table name'

您可以编写此查询以获取列名和所有详细信息,而不必使用MySQL中的信息模式:

1
SHOW COLUMNS FROM database_Name.table_name;


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

1
2
3
4
5
6
7
8
9
10
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类型


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

//表名是您的表


1
2
3
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

这个问题缺少以下方法:

1
2
-- List down all columns of table 'Logging'
SELECT * FROM sys.all_columns WHERE object_id = OBJECT_ID('Logging')

您可以尝试此操作。这将给出所有列名称及其各自的数据类型。

1
DESC <TABLE NAME> ;


运行这个命令

1
EXEC sp_columns 'Your Table Name'


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

1
2
3
4
5
6
7
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'

您可以使用此查询

1
2
3
SELECT *
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME LIKE N'%[ColumnName]%' AND TABLE_NAME = N'[TableName]'

1
2
3
4
5
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

另一个可以说更直观的选择是:

1
2
3
SELECT [name]
FROM sys.columns
WHERE object_id = OBJECT_ID('[yourSchemaType].[yourTableName]')

这会在一列中给出所有的列名。如果您关心其他元数据,可以将edit select语句更改为SELECT *


1
2
3
SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'name_of_your_table'