我有一个存储过程,我希望用户必须比数据库中的数据更多地输入日期。
实施例
user input date task
driver A : 2016/06/15
drive B : 2016/06/10
我希望存储过程阻止插入,因为驱动程序B的日期<&lt;司机A.司机B必须>司机A.
答案 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