2015-04-02 81 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