SQL Server验证输入日期时间>前

时间:2016-09-08 02:03:04

标签: sql sql-server

我有一个存储过程,我希望用户必须比数据库中的数据更多地输入日期。

实施例

user input date task 
driver A : 2016/06/15
drive B  : 2016/06/10

我希望存储过程阻止插入,因为驱动程序B的日期<&lt;司机A.司机B必须>司机A.

4 个答案:

答案 0 :(得分:0)

所以我理解的是,只有当记录(日期)比表格中的其他日期更新时才需要插入。

SELECT MAX (date) AS "Recentdate" 
FROM t;

将“Recentdate”与用户输入日期进行比较,并且只有在比“Recentdate”更新时才进行插入。

答案 1 :(得分:0)

如果您想要用户明智,那么添加条件为Euser = @user

CREATE PROC test
    @user VARCHAR(50),
    @date DATE      
 AS
BEGIN
    INSERT INTO #test(Euser, Edate)
    SELECT @user, @date FROM #test HAVING MAX(Edate) < @date
END 

用现有的真实替换表名和列名

答案 2 :(得分:0)

您应该使用NOT EXISTS,如下所示。

如果DateTask大于@DateTask,则会影响0行。

INSERT INTO Tbl
( UserInput, DateTask )
SELECT
    @UserInput,
    @DateTask
WHERE
    NOT EXISTS
    (
        SELECT 1 FROM Tbl T
        WHERE
            T.DateTask >= @DateTask
    )

答案 3 :(得分:0)

您需要检查存储过程,确定给定日期(输入)是否大于现有日期,如下所示,

CREATE PROCEDURE dbo.Yourprocedure
    @user VARCHAR(50),
    @Inputdate DATE    
AS
BEGIN
    DECLARE @dbMaxDate DATE

    SELECT @dbMaxDate = MAX([DATE]) 
    FROM YourTable

    IF @Inputdate <@dbMaxDate --Validatin step
       SELECT 'Input date is already available ;Please try with a date after '+CAST(@dbMaxDate as VARCHAR(10)) --Error message
    ELSE 
        INSERT INTO dbo.YourTable ([User], [Date])
            SELECT @user, @Inputdate 
END