如何在另一个过程中使用存储过程中的参数
我创建了一个在线职员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。希望我有道理。
我不知道正是你正在尝试做的,但如果你想在@RotaID
参数值返回给调用程序在未来的过程调用使用,可以作为OUTPUT
指定参数:
CREATE PROCEDURE [usp_RotaDay1]
(
@Week_Begin datetime,
@Week_End datetime,
@1ShiftDate datetime,
@1Day nchar (10),
@RotaID int OUTPUT
)
AS
...
我试过这个,虽然因为我在代码中进一步声明了RotaID参数,所以在试图指定为输出时出现错误。我想我需要重新组织我的代码,以便将RotaID设置为输出 – Danny
@Danny您不会再声明它,因为指定它为OUTPUT代替声明。 –
@Brain谢谢你,它为我提供了一个快速修复。我只是选择了ROUNDID WHERE shiftdate BETWEEN weekbegin和周末。 – Danny