有没有用 T-SQL 检索表列名列表的简洁方法?

Posted

技术标签:

【中文标题】有没有用 T-SQL 检索表列名列表的简洁方法?【英文标题】:Is there a succinct way to retrieve a list of table column names with T-SQL? 【发布时间】:2011-01-02 00:37:27 【问题描述】:

当我查看 SQL Server 数据库时,我经常希望使用 sqlcmd 以交互方式检索数据库表的列名的简单列表(没有数据类型信息等,只有名称)。

我可以这样做:

EXEC sp_columns @table_name = 'tablename'

这给了我比我想要的更多的东西,并在命令提示符中包装到几乎无法理解的程度,或者我可以这样做:

SELECT col.name 
FROM sysobjects obj 
INNER JOIN syscolumns col
ON obj.id = col.id where obj.name = 'tablename'

这给了我想要的,但有点冗长。

我希望能够做这样的事情:

SELECT column_name
FROM (EXEC sp_columns @table_name = 'tablename')

但这不起作用(例如,请参阅this question)。

有没有更简洁的方法来做到这一点(即更容易在命令行键入,因此更不容易出错)?

【问题讨论】:

【参考方案1】:

查看 ANSI 定义的 INFORMATION_SCHEMA 视图。尝试SELECT * FROM INFORMATION_SCHEMA.COLUMNS 作为初学者,然后从那里继续。

您的示例将需要此 SQL:

SELECT column_name
FROM information_schema.columns
WHERE table_name = 'tablename'

【讨论】:

它的优点是它是一个 ANSI 标准视图,因此在 Microsoft 更改底层系统表时不会改变。 @Christian:新目录视图的设计方式也相同【参考方案2】:
SELECT [name] FROM sys.columns WHERE [object_id] = OBJECT_ID('MyTable')

Catalog views:

我们建议您使用目录 意见,因为他们是最 目录的通用接口 元数据并提供最 获取、转换、 并呈现这个的定制形式 信息。所有用户可用 目录元数据通过 目录视图。

纯属个人观点,但我不喜欢 INFORMATION_SCHEMA 视图

【讨论】:

INFORMATION_SCHEMA 视图是由一个委员会设计的 - 这说明了一切 :-( 巨大,丑陋,不是很有用.... @marc_s:呵呵。很愤世嫉俗,不是吗? 我使用信息模式是因为我可以记住如何编写查询。 sys 和 object_id 似乎是由制作《科学怪人》的同一个人设计的。 :)

以上是关于有没有用 T-SQL 检索表列名列表的简洁方法?的主要内容,如果未能解决你的问题,请参考以下文章

使用T-SQL语句操作数据表-插入数据

数据库表的管理(使用T-SQL语句)

使用T-SQL语句操作数据表-查询数据

入门Mysql命令总结!!!

2 检索数据

如何以编程方式确定哪些 SQL 表具有标识列