0

此存储过程用于检查任何用户不能在同一时间段内申请休假的日期验证,该时间段之前在同一时间段内应用。这工作正常。但是如果任何用户想要更新休假时间,那么它就无法工作

例如,如果用户之前申请休假 - 2013 年 5 月 12 日至 2013 年 5 月 19 日,并且 registerLeaveID(休假表中的唯一字段)为 14。

如果用户想将相同的 registerLeaveID 的休假持续时间从 2013 年 5 月 14 日更新到 213 年 5 月 16 日,则此存储过程还将新的休假日期与此 registerLeaveID(12) 日期进行比较。

如何停止不使用 registerleaveID 日期检查日期验证

CREATE PROCEDURE dbo.Test
@startdate datetime,@enddate datetime,@Userid int ,@Registerid

AS
BEGIN
SELECT  Count(*)  FROM leave 
WHERE 
(

(UserID=@userid)

 AND 

 (
      (@startdate BETWEEN StartDate AND EndDate)
      OR 
      (@enddate BETWEEN StartDate AND EndDate) 
      OR
        (
            (@startdate <= Startdate AND @enddate>=EndDate)
        )
  )

)

END
4

2 回答 2

2

这可能有帮助..

CREATE PROCEDURE Test
@startdate DATETIME, @enddate DATETIME, @Userid INT, @Registerid INT
AS
BEGIN
    SELECT Count(*)
    FROM   leave
    WHERE  ((UserID = @userid)
            AND ((@startdate BETWEEN StartDate AND EndDate)
                 AND (@Registerid <> Registerid)
                 OR (@enddate BETWEEN StartDate AND EndDate)
                 OR ((@startdate <= Startdate
                      AND @enddate >= EndDate))));
END
于 2013-05-23T06:59:48.093 回答
0
CREATE PROCEDURE usp_AddTestData_UsingExists
(
    @Name varchar(50),
    @Qualification varchar(50)
) 
AS
DECLARE @Result int
BEGIN TRANSACTION 
IF EXISTS
(
    SELECT NULL
    FROM
        TestData WITH (UPDLOCK)
    WHERE
        [Name] = @Name AND
        Qualification = @Qualification
)
    BEGIN
        SELECT @Result = -1
    END
ELSE
    BEGIN
        INSERT INTO TestData
        (
            [Name],
            Qualification
        )
        VALUES
        (
            @Name,
            @Qualification
        )
        SELECT @Result = @@ERROR
    END
IF @Result <> 0
    BEGIN
        ROLLBACK
    END
于 2014-10-16T07:35:52.643 回答