有没有用 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 检索表列名列表的简洁方法?的主要内容,如果未能解决你的问题,请参考以下文章