我有一个 SQL 存储过程,它接受一个默认值为 NULL 的 DateTime 参数
@pmNext_Check_Date DATETIME=NULL
我想在 3 个场景中使用这个参数:
- 如果为 NULL 则不更新任何记录
- 如果它有一个日期值,那么更新我在 WHERE 子句中指定的所有记录
- 问题一!对于 WHERE 子句中的记录,将查询中的所有日期字段设置为 NULL。
这是 SP 中导致我出现问题的代码块(UPDATE 语句的其余部分在 SP 的其他地方构建并且工作正常):
IF @pmNext_Check_Date IS NOT NULL
IF @pmNext_Check_Date ='' --This is the bit that is causing me a problem. I just need to check for a empty date
SET @sql = @sql + ' Next_Check_Date = NULL '
ELSE
SET @sql = @sql + ' Next_Check_Date = @pmNext_Check_Date '
SET @sql = @sql + ' WHERE ID IN (1, 2)'
因此,例如,如果我有以下 2 行:
ID NextCheckDate
1 2012 年 12 月 12 日
2 空
在场景 1 中,我不会传递参数,因为该过程将使用默认值并且不会更新任何日期。
在方案 2 中,我传入一个日期值并使用日期值更新两行
在场景 3 中,我想将行上的日期值更新为空。场景 1 和 3 之间的区别在于,在场景 3 中,用户将选择将日期值设置为空。
所以,我想将一个空白日期传递给存储过程。我正在从 C# 执行此操作,并想做如下操作:
SqlParameter param = new SqlParameter("@pmNext_Check_Date", "");
这失败了,因为 SP 需要一个 DateTime。
所以我希望能够传递一个空白日期,以及如何在 SP 中检查它。下面的当前检查不起作用:
IF @pmNext_Check_Date =''
提前致谢。希望这一切都有意义。我正在使用 C#4.0 和 SQL 2008