我已经设置了一个SQL存储过程,其中参数是可选的,如前端那样,这些过滤器的任何组合都可以具有值或不具有值。唯一的问题是当我传入一个空日期时。如果我将此null留空,SQL会产生错误,但是我已经设法解决了这个问题并发现使用以下内容应该可以解决错误:
SET @SessionStarted = ISNULL(@SessionStarted, GETDATE())
然而,现在它没有返回它应该返回的记录,因为它只查找具有当前日期和时间的记录。
参数定义如下:
@SessionStarted datetime = NULL,
此特定参数的where子句是:
(@SessionStarted IS NULL OR VisitDate = @SessionStarted)
当无法指定值时,是否存在此问题?
答案 0 :(得分:1)
您可以在isnull中使用不同的日期并检测它。类似于' 1900-01-01'感觉就像一个好的"已知的无效"用来代替你的NULL。
答案 1 :(得分:0)
为变量分配当前日期时间(如下所示) SET @SessionStarted = ISNULL(@SessionStarted,GETDATE())
并将它(如下所示)与日期时间数据类型列进行比较,该列永远不会等于且不会返回记录。
(@ SessionStarted IS NULL或VisitDate = @SessionStarted)
您应该确保datetime列保存的值是什么,以及在传递NULL值的情况下为变量分配的预期默认值是什么。