0

我创建了一个在线员工名单应用程序。我对一周中的每一天都有一个存储过程,其中包含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

如您所见,我RotaID在表中声明,Rota然后作为表中的外键传递DayShift

我想知道是否可以将其传递给与此类似的其他存储过程。

4

2 回答 2

1

我不确定您到底要做什么,但是如果您想将@RotaID参数值返回给调用程序以在将来的过程调用中使用,您可以将参数指定为OUTPUT

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

    @1ShiftDate datetime,
    @1Day nchar (10),
    @RotaID int OUTPUT
)
AS
    ...
于 2013-03-29T14:08:12.807 回答
0

在每个辅助存储过程中,您需要使用 select 语句检索主键 ID。您知道所有辅助程序的周开始和周末,对吗?所以你知道要提取哪一行来检索 id。希望我说得通。

于 2013-03-29T14:09:24.510 回答