2013-03-29 37 views
0

我創建了一個在線職員rota應用程序。對於Rota表,我有一個存儲過程,每週有一個自動增量主鍵。在選定的一週內的每一天將有相同的rota ID作爲外鍵。如何在另一個過程中使用存儲過程中的參數

我有選擇的第一天沒有問題,但在接下來的幾天返回NULL外鍵RotaID,因爲我不知道如何RotaID傳遞到另一個存儲過程來確保RotaID仍然是7相同每週的天數爲Rota

CREATE PROCEDURE [usp_RotaDay1] 

@Week_Begin datetime, 
@Week_End datetime, 

@1ShiftDate datetime, 
@1Day nchar (10), 

AS 
BEGIN 
SET NOCOUNT ON; 

DECLARE @RotaID int 
IF NOT EXISTS 
(
SELECT * FROM Rota 
WHERE Week_Begin = @Week_Begin 
AND 
Week_End = @Week_End 
) 
BEGIN 

INSERT INTO Rota 
(
[Week_Begin], 
[Week_End] 
) 

VALUES 
(
@Week_Begin, 
@Week_End 
) 
END 

SELECT @RotaID = SCOPE_IDENTITY() 
IF NOT EXISTS 
(
SELECT * FROM DayShift 
WHERE ShiftDate = @1ShiftDate 
) 
BEGIN 

INSERT INTO DayShift 

(
[RotaID], 
[ShiftDate], 
[Day] 
) 

VALUES 
(
@RotaID, 
@1ShiftDate, 
@1Day 
) 
END 

SET NOCOUNT OFF; 
END 

正如你可以看到我有在Rota表宣佈RotaID,然後作爲DayShift表的外鍵通過。

我想知道是否有可能將這個通過我的其他存儲過程,這是類似於這一個。

回答

0

在每個輔助存儲過程中,都需要使用select語句檢索主鍵標識。你知道週末和週末的所有二手手術對嗎?所以你知道哪一行拉檢索ID。希望我有道理。

+0

@Brain謝謝你,它爲我提供了一個快速修復。我只是選擇了ROUNDID WHERE shiftdate BETWEEN weekbegin和週末。 – Danny

1

我不知道正是你正在嘗試做的,但如果你想在@RotaID參數值返回給調用程序在未來的過程調用使用,可以作爲OUTPUT指定參數:

CREATE PROCEDURE [usp_RotaDay1] 
(
    @Week_Begin datetime, 
    @Week_End datetime, 

    @1ShiftDate datetime, 
    @1Day nchar (10), 
    @RotaID int OUTPUT 
) 
AS 
    ... 
+0

我試過這個,雖然因爲我在代碼中進一步聲明瞭RotaID參數,所以在試圖指定爲輸出時出現錯誤。我想我需要重新組織我的代碼,以便將RotaID設置爲輸出 – Danny

+0

@Danny您不會再聲明它,因爲指定它爲OUTPUT代替聲明。 –

相關問題