2015-04-02 76 views
0

让存储过程说我有2个存储过程:如何防止返回结构从其他存储过程

CREATE spTest1 
AS 
BEGIN 
    SELECT Field1 FROM TableA 
END 

CREATE spTest2 
AS 
BEGIN 
    EXEC spTest1 
    SELECT Field2 from TableB 
END 

如果我们看一下从spTest执行的结果,我们可以看到,返回2个的结果集。有没有办法只返回spTest2的结果集,即Field2TableB

感谢您的帮助...

+0

这可能听起来很不自然,但停止返回2个结果集的spTest2的方法是不返回2个结果集。这里真正的问题是什么? – 2015-04-02 17:22:54

+0

我没有返回任何结果集,但SQL默认返回它们。 – malkassem 2015-04-02 17:23:58

+0

我认为,也许更好的答案是我无法更改spTest1,并且需要返回spTest2中的结果集。这个答案可能更有意义。 – malkassem 2015-04-02 17:25:45

回答

2

这是不好的设计。如果存储过程的目的是“返回结果集”,则不应在其他存储过程中调用该过程。我的猜测是内部程序对外部程序来说是必需的。 “做东西”部分应该与“返回结果集”部分分开,这样你就不必疯狂的解决方法了。

+0

我不反对你。当存储过程严重存在时,会出现问题,然后您决定为什么要保留第二个副本并维护该过程。我猜最好的2个邪恶。 – malkassem 2015-04-02 17:34:08

+0

当您不应用分离原则时会出现问题。在这种情况下,你必须分开3个SP:1)做东西; 2)呼叫#1并选择A 3)呼叫#1并选择B – jean 2015-04-02 17:37:37

+1

我不会保留该程序的两个副本。但理论上你应该能够将它分成两部分,并且“返回一个结果集”也称为“做东西”部分。无需维护2个地方的东西。 (理论上至少) – Necreaux 2015-04-02 17:38:08