为什么sp_columns没有返回结果?

5

我正在尝试为我在StackOverflow上发布的不同帖子“描述”一张表格,但是当我运行sp_columns时,没有结果或行被显示。

sp_columns assignee

结果:

A bunch of column headers...

我的数据库出了什么问题,为什么这个不起作用?

3
为什么会有负评?如果问题不好,至少说明原因或者编辑它使其变得更好。 - mlissner
3
1,000整体浏览量!在9个月内!哇!它是否登上了Reddit或Hacker News的头条?浏览量是否能反映质量? - Aaron Bertrand
嗯,这有1,000个人发现它很有用。在我看来,这相当不错。也许我们对流行/有用的看法不同。 - mlissner
5
浏览网页并不意味着他们认为你的问题有用。这只是表示他们看到了它。判断他们是否认为问题有用的一个好标准是,如果所有1000多个人都点赞了它。但因为只有3个人点赞了它…… - Aaron Bertrand
2
(还有一件有趣的事情需要注意,如果你没有在9个月后大惊小怪地提出这个问题,你就不会有一堆新的人看到你的问题,但仍然觉得它没有用。有趣的是,没有一个新的观众点赞这个问题;他们也许也觉得它没有用。你有看到点赞和踩按钮上的工具提示吗?) - Aaron Bertrand
显示剩余4条评论
5个回答

11

使用目录视图代替 sp_columns (许多这些 sp_ 过程没有更新以适应新功能)。

SELECT name, system_type_id, ...
  FROM sys.columns
  WHERE [object_id] = OBJECT_ID('dbo.TableName');
  ---- yes this is important ----^^^^

还要确保你在正确的数据库中,这一点显然。


3

针对特定模式,请尝试以下操作:

sp_columns tableName, schemaName

2

INFORMATION_SCHEMA是ANSI标准。

最初的回答

SELECT *
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = 'dbo' AND TABLE_NAME = 'MEMBER_FLAGS'
;

SELECT COLUMN_NAME,DATA_TYPE,CHARACTER_MAXIMUM_LENGTH,NUMERIC_PRECISION,NUMERIC_PRECISION_RADIX
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = 'dbo' AND TABLE_NAME = 'MEMBER_FLAGS'
;

1
如果连接到错误的数据库,查询将会执行而不报错,但是不会返回任何结果。
例如,如果你有一个名为assignee的表在patents数据库中,并且在master数据库中运行此查询,你将得不到任何结果和错误。
sp_columns 'dbo.assignee';

结果:

Nothing, nada, zilch.

如果您更改连接以使查询应用于正确的数据库,则会获得结果。

2
@AaronBertrand:我不知道为什么,但是对于我来说 EXEC sp_columns 'dbo.tablename'; 返回一个空集合,即使 EXEC sp_help 'dbo.tablename' 运行正常。编辑: EXEC sp_columns 'tablename', 'dbo' 可以工作!(同样不需要引号) - Andriy M
@AndriyM,你用的是哪个版本的SQL Server?无论如何,如果你无法让sp_columns正常工作,更应该停止使用sp_存储过程,改用sys.columns(或者在2012年后,使用新的元数据发现函数/存储过程)。特别是如果你有其他模式下的表 - 尝试在AdventureWorks中完成这些操作吧,祝你好运。 - Aaron Bertrand
@AaronBertrand:SQL Server 2008 R2 RTM。我从未使用过sp_columns,只是为了自己的学习而查看它。正是sp_helptext sp_columns向我展示了正确使用该存储过程的方法,但我同意您的观点,可能永远不需要使用sp_columns - Andriy M
3
我无法重现你的结果。我的服务器没有返回“Nothing, nada, zilch.”... 请帮忙,这是紧急问题,我可能会被解雇。 - Kermit

0

请尝试以下方法:

exec sp_columns yourTableName

此操作将返回指定表和视图的列信息,这些表和视图可以在当前环境中进行查询。

注意:如果表包含数据,则只会返回数据列表。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接