如何在另一个过程中使用存储过程中的参数

问题描述:

我创建了一个在线职员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表的外键通过。

我想知道是否有可能将这个通过我的其他存储过程,这是类似于这一个。

在每个辅助存储过程中,都需要使用select语句检索主键标识。你知道周末和周末的所有二手手术对吗?所以你知道哪一行拉检索ID。希望我有道理。

+0

@Brain谢谢你,它为我提供了一个快速修复。我只是选择了ROUNDID WHERE shiftdate BETWEEN weekbegin和周末。 – Danny

我不知道正是你正在尝试做的,但如果你想在@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代替声明。 –