Sql Server - 有啥方法可以找到哪些存储过程返回集合,哪些不返回?

Posted

技术标签:

【中文标题】Sql Server - 有啥方法可以找到哪些存储过程返回集合,哪些不返回?【英文标题】:Sql Server - Any way to find which stored procedures return sets and which not?Sql Server - 有什么方法可以找到哪些存储过程返回集合,哪些不返回? 【发布时间】:2011-10-14 19:42:03 【问题描述】:

我需要构建一个服务,该服务在 sql server 数据库中公开有关存储过程的元数据。 有什么方法可以找出哪些存储过程返回集,哪些没有,因此可以通过 ExecuteReader 或 ExecuteNonQuery 相应地调用它们?

谢谢

【问题讨论】:

可能的重复:***.com/questions/516552/…***.com/questions/3747879/… 【参考方案1】:

事实证明(我在 Google 上搜索过)这样做的方法是在 Sql Server 上将 FMTONLY FLAG 设置为 ON。

见here.

这是一个取自here的例子:

SET FMTONLY ON;

  EXEC dbo.MyTestSproc @param1 = NULL, @param2 = NULL, @param3 = NULL

SET FMTONLY OFF;

在存储过程不返回任何数据的情况下,您将看不到任何输出(至少这是我在 SSMS 中的观察)。当 proc 确实返回数据时,您会看到显示的列名实际上没有返回任何内容。

所以这是一种尝试,一种错误。

注意:我用一个使用表值参数的 proc 进行了测试,即使 proc 确实返回了数据,它也没有产生任何输出。将参数设置为 NULL 不起作用,SSMS 抱怨一个令人讨厌的错误。该错误似乎与 proc 内部使用的临时表有关,不一定与 table-value 参数有关,但仍然没有产生空结果集:

消息 208,级别 16,状态 0,程序 spWhatever, 第 20 行无效的对象名称“#temp”。

查看 Michael 发布的链接,例如,如果 proc 根据传入的参数返回不同的结果集,则似乎无法确定。请参阅 Marc Gravell 的回答。

【讨论】:

以上是关于Sql Server - 有啥方法可以找到哪些存储过程返回集合,哪些不返回?的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server Agent有啥作用 怎样用它

sql server查看有哪些存储过程和视图的方法

有啥方法可以创建与 SQL Server 2005 中的视图具有相同布局的表?

SQL Server - 有啥方法可以加快插入 TVF 中的表变量的速度?

SQL SERVER如何查看一个表被哪些存储过程用到?用哪个系统存储过程?

有啥方法可以将 SQL Server 的 dbo.HashPasswordString() 与类似于 md5() 的 PHP 一起使用?