【问题标题】:How can I get the stored procedure returned columns without knowing the input parameters?如何在不知道输入参数的情况下获取存储过程返回的列?
【发布时间】:2012-11-12 08:40:59
【问题描述】:

我想虚拟地执行一个存储过程并获取返回的列。我使用fmtonly,如下所示:

set fmtonly on
exec spName null
set fmtonly off

但是使用 fmtonly 导致运行所有代码行,并且这项工作的结果是 ERROR。 有什么解决方案可以完成这项工作吗?

【问题讨论】:

  • 我不知道“虚拟执行存储过程”是什么意思。
  • 我猜你的意思是只返回存储过程将返回的列。有关类似问题,请参阅 stackoverflow.com/questions/7368864/…
  • 我看到提到的一些东西暗示 fmtonly 在某些情况下仍会执行 SP,但文章没有详细说明何时/为什么会发生这种情况。请参阅此示例,它不仅在执行 sp,而且在执行过程中会导致奇怪的行为:stackoverflow.com/questions/303152/…
  • @Oded:我认为他的意思是他只想知道SP将返回的字段,而不是实际的数据行。

标签: sql sql-server stored-procedures fmtonly


【解决方案1】:

您需要使用sp_describe_first_result_set,这是 SQL Server 2012 的新功能。请注意,这需要您提供输入参数(至少是类型)。

在 T-SQL 开发中,人们期望知道正在调用什么过程以及预期的结果集是什么。在 SQL Server 2012 之前,对动态、运行时、过程输出发现和所需参数的支持很少。这个新过程,以及像sp_describe_undeclared_parameters 这样的其他过程,可用于创建需要探索可用编程 API 表面的工具。这些被添加到 2012 年的事实应该表明在 2012 年之前无法正确处理等价物。环回链接服务器等解决方案存在许多问题,主要是因为它们实际上执行的代码具有潜在的灾难性影响。

【讨论】:

  • 感谢您的回答,但我也希望在 SQL Server 2008 中使用此功能。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-30
  • 2013-02-24
  • 2022-01-15
  • 1970-01-01
相关资源
最近更新 更多