【发布时间】:2013-01-22 12:03:20
【问题描述】:
我有一个 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 中,用户将选择将日期值设置为 null。
所以,我想将一个空白日期传递给存储过程。我正在使用 C# 执行此操作,并希望执行以下操作:
SqlParameter param = new SqlParameter("@pmNext_Check_Date", "");
这失败了,因为 SP 需要一个 DateTime。
所以我希望能够传入一个空白日期,以及如何在 SP 中检查它。下面的当前检查不起作用:
IF @pmNext_Check_Date =''
提前致谢。 希望这一切都有意义。 我正在使用 C#4.0 和 SQL 2008
【问题讨论】:
-
我假设您尝试发送
DBNull.Value,对吧? -
是的,我试过了。这和使用默认值是一样的
-
您可以尝试发送 mindate 或 maxdate 并在您的 SP 中读取它
-
我希望空白日期的值类似于 '',我可以在我的 SP 中检查它。所以有点像字符串 Null 与空字符串不同。我不会将 '' 插入数据库。我想检查那个值然后插入 null。
-
除非您使用的是我从未听说过的 SQL Server 版本,否则添加另一个参数不会增加成本(如果您处于任何实际限制关于允许的参数数量,您还有其他问题)。只需在过程中添加另一个命名良好的参数即可。
标签: c# sql-server-2008 datetime sqlparameter