当我在查看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)。
是否有更简洁的方法(即更容易在命令行输入,因此更不容易出错)?
答案 0 :(得分:9)
查看ANSI定义的INFORMATION_SCHEMA视图。首先尝试SELECT * FROM INFORMATION_SCHEMA.COLUMNS
,然后从那里继续。
您的示例需要此SQL:
SELECT column_name
FROM information_schema.columns
WHERE table_name = 'tablename'
答案 1 :(得分:4)
SELECT [name] FROM sys.columns WHERE [object_id] = OBJECT_ID('MyTable')
我们建议您使用目录 观点,因为他们是最多的 目录的通用接口 元数据并提供最多 有效的获取,转换方式, 并提出这种定制形式 信息。所有用户都可用 目录元数据通过公开 目录视图。
纯粹个人,但我不喜欢INFORMATION_SCHEMA观点