【问题标题】:Retrieving the number of results sets from a Sql server stored procedure from c#从 c# 中检索 Sql server 存储过程的结果集数量
【发布时间】:2012-08-30 13:36:46
【问题描述】:
您好,我正在编写一个 T4 模板来为 Sql server 存储过程生成访问器。我混合使用了 SMO 和 CommandBuilder 的 DeriveParameters 方法来获取我需要的几乎所有信息。
但是,我无法找到一种方法来确定存储过程是否返回以及返回多少结果集。
本质上,我正在寻找一种复制 Codesmiths SchemaExplorer CommandResults.Count 属性的方法。
我不想走解析存储过程测试的路。
提前干杯。
【问题讨论】:
标签:
c#
sql-server
stored-procedures
smo
multiple-resultsets
【解决方案1】:
SQL Server 不存储任何关于存储过程可能返回多少结果集的元数据。可能有 0、1 或 n,这可能会根据存储过程中的逻辑、传入的参数值、系统状态等而改变——所有在检索元数据时都无法考虑的事情.即使是 2012 年新的元数据功能也只处理在存储过程中描述 first 结果集的形状 - 如果有更多,你就靠你自己了。
所以不,我认为没有任何方法可以可靠地做到这一点。即使结果集的数量不能根据各种因素而改变,你能做的最好的事情就是糟糕的SET FMTONLY ON; 技巧(它有自己的一系列问题)并计算结果:
SET FMTONLY ON;
EXEC dbo.whatever;
如果执行存储过程会改变系统的状态,这显然是不好的,但对于报告式存储过程,在很多情况下可能还可以。
【解决方案2】:
据我所知,除了解析存储过程主体之外没有其他办法(请记住,它可能包含条件,结果计数可能会根据它们而改变)。