2012-07-06 39 views
2

我有一个调用另一个存储过程sp_1_1的存储过程sp_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(返回结果)

+0

...这听起来像是一个重构的机会(即将'sp_1_1'和'sp_1_1_1'分为两个过程]。压制你的结果实际上只是一个短期收益。我不知道是否有可能从SP返回两个不同的结果集(尽管我从来没有对它们造成太大影响) - 您是否可以不创建两个临时表,如您的示例? – 2012-07-06 15:33:30

+0

就像您的建议听起来一样,重构sp_1_1和sp_1_1_1(显然不是真正的sp名称,只是别名为清晰起见)并不是一个选项,因为它们被其他使用反馈的进程使用。感谢您的反馈。 – callisto 2012-07-07 11:00:40

+1

SQL Server“Denali”为您提供处理结果集的新选项。在这种情况下,因为你嵌套你显然不能使用插入/执行技巧。一种解决方法是,如果你不想重构太多,就是用一个默认的参数添加到proc中,像@SuppressResults bit = false – Runonthespot 2012-11-09 15:22:38

回答

1

首先,顺便说一句,SQL服务器“德纳”给予用户处理结果集的新选择。

在这种情况下,因为你嵌套你显然不能使用插入/ EXEC伎俩。

一个缺憾解决办法,如果你不想重构太多,是一个参数添加到PROC与默认情况下,像@SuppressResults位= FALSE。

然后,在需要嵌套的例程中,使用@ SuppressResult = True显式调用它,然后在@ SuppressResults = True的情况下更改例程中的代码以不选择结果。

重要的是提供一个默认值并将参数放在最后。这将防止代码库中其他地方的例程的现有调用需要被修改。