2011-06-09 92 views
2

我有兩個存儲過程。讓我們把它們作爲SP1和SP2。 SP1是主要存儲過程,SP2是在SP2內部調用的存儲過程。 即SP1)有三個輸入參數(Fromdate,todate,LoginName),SP2有一個輸入參數(LoginName)。 我想要做的是:調用裏面SP2 SP1的WHERE子句爲:如何調用where子句中的存儲過程

SELECT column1, 
     column2, 
     column3 
from <Sometable> 
where column1<=fromdate and column1>=todate and column2 in(exec SP2 @LoginName) 

IAM不知道語法的,但是這是我想達到的目標。 需要幫助

回答

3

以下是實現此目的的一種方法 - 您可能還需要閱讀Table-valued UDFs

CREATE TABLE #logins (
    <schema for EXEC SP2 return here> 
) 

INSERT INTO #logins 
    EXEC SP2 @LoginName 

SELECT column1, column2, column3 
from YOUMISSEDTHETABLEOUTHERE 
where column1<=fromdate and column1>=todate and column2 in (
    SELECT therelevantcolumn FROM #logins 
) 
+0

酷招!我們可以改變一個表變量嗎?臨時表的範圍有所不同,我發現表變量在這裏是一個更好的方法。 – 2011-06-09 07:54:09

+2

@John - 當然可以,一個@table或物理表是INSERT ... EXEC的可接受目標。我發現@tables由於缺乏統計信息而無法使用,會導致可疑的查詢計劃。 – 2011-06-09 07:56:07

+0

對於大型數據集,你不會使用@table嗎? – 2011-06-09 07:59:27

相關問題