【发布时间】:2012-07-07 00:12:31
【问题描述】:
我有一个存储过程 sp_1,它调用另一个存储过程 sp_1_1。
我知道如何使用this trick 抑制 sp_1_1 的结果。
真正的问题是 sp_1_1 本身也调用了另一个存储过程 sp_1_1_1,它也将其结果返回给 sp_1_1!
我不能更改 sp_1_1 或 sp_1_1_1,只能更改 sp_1。
返回给 sp_1 的结果是 2 个记录集,第一个来自 sp_1_1,第二个来自 sp_1_1_1。
总结:
sp_1(需要抑制从下面返回的两个记录集)
+---- sp_1_1(返回自己的结果,然后从下面的结果)
+----------sp_1_1_1(返回结果)
【问题讨论】:
-
... 这听起来确实像是一个重构的机会(即,将
sp_1_1和sp_1_1_1拆分为两个过程)。压制你的结果实际上只是短期的收获。我不知道可以从 SP 中返回两个不同的结果集(不过,我从来没有把它们弄乱过)——你能不能像你的例子一样创建两个临时表? -
尽管您的建议听起来不错,但重构 sp_1_1 和 sp_1_1_1(显然不是真正的 sp 名称,只是为了清晰起见的别名)根本不是一种选择,因为它们被使用反馈的其他进程使用。不过感谢您的反馈。
-
SQL Server "Denali" 为您提供了处理结果集的新选项。在这种情况下,因为您正在嵌套,所以您显然不能使用插入/执行技巧。如果您不想重构太多,一个笨拙的解决方法是使用默认值向 proc 添加一个参数,例如 @SuppressResults bit = false
标签: sql sql-server-2008 suppress