存储过程日期验证不检查特定ID的现有日期



这个存储过程用于检查任何用户都不能应用的日期验证离开同样的时间在同一时间段之前应用。这是正常工作。但是如果任何用户想要更新休假时间那么它就不能工作

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

如果用户想更新休假期限2013年5月14日至2013年5月16日相同的registerLeaveID则此存储过程比较新的休假date with this registerLeaveID(12) date also

如何停止使用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

这可能会有帮助。

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
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

最新更新