2010-01-28 130 views
1

我有,在目前執行1個SP的SP獲取在其他SP執行的SP選擇的ID

EXEC mpSPAccess.PostIdSelect @PostDate = @TodaysDate 

的SP確實是這樣的(非常simplyfied :))

SELECT id FROM Post WHERE DateCreated = @PostDate 
該SP執行

後,我想用我從PostIdSelect得到了ID爲多個SP的參數就像這樣:

EXEC mpSPAccess.GetSomethingWithThePostIdSelect @PostId = @PostIdFromTheFirstSpSELECT 
EXEC mpSPAccess.GetAnotherSomethingWithThePostIdSelect @PostId = @PostIdFromTheFirstSpSELECT 

這是可能的某種方式?

回答

2

你可以只設置您的PostIdSelect存儲過程返回一個int或任何合適的輸出參數,代表您選擇的ID,然後養活,爲您的其他特效,是這樣的:

CREATE PROCEDURE PostIdSelect 

    @PostDate datetime, 
    @PostId int OUTPUT 

AS 

SELECT @PostID = id FROM Post WHERE DateCreated = @PostDate 

GO 

然後利用這個,

DECLARE @OutputID int 

EXEC PostIdSelect '1/28/2010', @OutputID 

SELECT @OutputID -- Optional, just to view the resulting output ID 

EXEC GetSomethingWithThePostIdSelect @PostID = @OutputID 

一個說明,與你最初的SELECT語句,你可能想使用SELECT TOP 1 ID或東西,以防止返回多個值,除非你肯定知道dateCreated會會是唯一的每一個記錄在ta BLE。

+1

應該是 SELECT @PostId = id FROM Post WHERE DateCreated = @PostDate ?? ?? – 2010-01-28 13:58:50

+1

不要忘記將ID分配給PostIdSelect sproc中的@PostId :) .... SELECT @PostId = id FROM Post WHERE DateCreated = @PostDate。 DateCreated指向也是至關重要的,同意 – AdaTheDev 2010-01-28 14:01:05

+0

「不正確的語法附近'='。」當我嘗試SELECT @PostId = ID FROM Post WHERE DateCreated = @PostDate,所以它似乎不工作,爲什麼? – Marcus 2010-01-28 14:26:17

0

您這樣一個存儲過程表明:

CREATE PROCEDURE PostIdSelect 
    @PostDate datetime 
AS 
SELECT id FROM Post WHERE DateCreated = @PostDate 

這可以不加修改地通過捕獲行集到一個表中:

DECLARE @PostID int 
CREATE TABLE #PostIDs (PostID int) 
INSERT #PostIDs EXEC PostIdSelect @TodaysDate 
SELECT @PostID = TOP 1 PostID FROM #PostIDs 
-- use @PostID 

另一種方式來做到這一點,如果你永遠只返回一行,就是使用輸出參數,這需要修改存儲過程:

CREATE PROCEDURE PostIdSelect2 
    @PostDate datetime, 
    @PostID int OUT 
AS 
SELECT TOP 1 @PostID = id FROM Post WHERE DateCreated = @PostDate 

使用它像這樣:

DECLARE @PostID int 
EXEC PostIdSelect2 @TodaysDate, @PostID OUT 
-- use @PostID 

注意用這兩種方法,你無法掩飾的想法,可能有多個PostIDs。使用第一個表格插入方法,您可以單獨對每行執行一些操作,甚至可以連接到表格。最好儘可能加入到表中,但如果你必須單獨對每行進行一些操作,快速前進的只讀光標實際上比循環更快。