如果您使用 SQL Server,最简单的解决方案是添加CHECK CONSTRAINT
以防止任何人输入超出 (SQL Server) 系统日期的日期。
ALTER TABLE Sale ADD CONSTRAINT CKC_SALE_SALEDATE CHECK (SaleDate <= GetDate());
Edit 1 关于OP关于向存储过程添加检查约束的评论
的好处是CHECK CONSTRAINT
是在不禁用它的情况下无法绕过它。
总会有这样的情况:有人在不执行您设置的存储过程的情况下插入/更新数据。该约束将防止输入不正确的数据。
Edit 2 关于OP检查GetDate()时的错误
以下构造当前无法编译
If salemonth > GETDATE(Month(saledate))
or saleyear > GETDATE(YEAR(saledate))
错误消息提示此处出现错误,GetDate() 函数不带任何参数。最有可能的是,我怀疑你打算写这样的东西
If salemonth > MONTH(GetDate())
or saleyear > YEAR(GetDate())
Edit 3
验证输入不是将来的可以通过使用以下 if/then/else 结构来完成。另一种选择是将输入转换为实际日期并进行检查。
IF (YEAR(GetDate()) < @year)
Raiserror ('Invalid entry, you cannot enter future dates',16,1)
ELSE IF (YEAR(GetDate()) = @year) AND (MONTH(GetDate()) < @month)
Raiserror ('Invalid entry, you cannot enter future dates',16,1)
SQL 小提琴示例 http://www.sqlfiddle.com/#!6/02138/1