我在sql server 2005存储过程中创建一个动态查询,如果是,我收到错误 日期被发送为空/ null到存储过程:
This input parameter cannot be converted
那么,如何检入仅隐藏id日期的存储过程不为空: 下面是我的查询。我在if条件中检查了null,但是它也显示错误
If @startDate IS NOT NULL AND @endDate is Not null
Begin
set @strCondition = ' FO.Rf_Date >= convert(datetime, ''' + Convert(varchar,@startDate,112) + ''') and FO.Rf_Date<= convert(datetime, ''' + Convert(varchar,@endDate,112) + ''')'
End
答案 0 :(得分:1)
如果它们可以为空或 null,则还需要排除空变量,例如
IF NULLIF(@startDate, '') IS NOT NULL AND NULLIF(@endDate, '') IS NOT NULL
答案 1 :(得分:1)
你也可以使用ISDATE()函数以及类似这样的CASE语句。
SET @strCondition = N' SELECT * FROM TableName WHERE 1 = 1 ' --<-- 1 = 1 so you can append any more line starting with 'AND'
+ CASE WHEN ISDATE(NULLIF(@startDate,'')) = 1
THEN N' AND FO.Rf_Date >= convert(datetime, ''' + Convert(varchar,@startDate,112) + ''') '
ELSE N'' END
+ CASE WHEN ISDATE(NULLIF(@endDate,'')) = 1
THEN N' AND FO.Rf_Date <= convert(datetime, ''' + Convert(varchar,@endDate,112) + ''')'
ELSE N'' END
注意强>
如果传递的参数不是日期值,则ISDATE()函数返回0,它也返回0,传递的值为NULL。