【发布时间】:2020-03-09 00:39:15
【问题描述】:
所以我有sproc1,它做了一些事情并返回一些行。重要的是它做了一些事情。我也有 sproc2 做一些事情,调用 sproc1 (它做自己的事情) 并返回它自己的行。问题是当我调用 sproc2 时,我得到 2 个结果集。第一个来自sproc1,第二个来自sproc2。
在sproc2中调用sproc1时是否可以轻松抑制它?
据我所知,我有两种方法可以做到这一点:
- 使用临时表来捕获
exec sproc的输出。 - 在
C#中导航到最后一个结果集并使用它,而忽略第一个结果集。
这些方法都不容易重复使用,因为:
-
首先要求我
CREATE一个与存储过程的输出相匹配的临时表 -
second 需要我遍历结果集以到达最后一个不知道哪个是最后一个,除非我尝试移动到下一个并通过
.NextResult()失败。
如果 SQL Server 允许我在另一个存储过程中执行一个存储过程,但抑制内部执行它的输出,那么简单的方法是。或者如果SqlCommand 允许ExecuteReader(CommandBehavior.LastResult) 并会自行导航到最后一个结果。
两者中的任何一个都可以通过简单且可重用的方式实现吗?
真正的解决方案是将内部存储过程重构为write 和read 组件。或者在内部存储过程中添加@param,以防止最终结果被选中。但我在这里偷懒!
【问题讨论】:
-
将参数添加到第二个 sp 并在 sp2 中使用 "if": if not @suppress_results select....
-
您可以使用 sepupic 选项或您在此处找到的其他选项:stackoverflow.com/questions/866484/…
-
您已经浏览了所有可用的选项,现在需要选择最不麻烦的一个!
-
这听起来像是 XY 问题。
-
@MitchWheat 我知道问题所在,我有解决方案,但我想知道是否有一些神秘的 SQLServer 知识,我可能不必比我已经知道如何更容易地处理这个问题。
标签: c# sql-server sqlclient