我在C#中的SQL语句(.NET Framework 4的对SQL Server 2K8运行),看起来像这样:如何将DBNull值传递给参数化的SELECT语句?
SELECT [Column1] FROM [Table1] WHERE [Column2] = @Column2
上述查询工作正常用下面的ADO.NET代码:
DbParameter parm = Factory.CreateDbParameter();
parm.Value = "SomeValue";
parm.ParameterName = "@Column2";
//etc...
尽管如果我将DBNull.Value分配给DbParameter的Value成员,即使Column2中有空值,该查询也会返回零行。如果我更改查询以适应空测试:
我在运行时发现“@ Column2附近的语法错误”异常。有没有办法可以在SELECT语句的WHERE子句中使用null或DBNull作为参数?
记住null不等于null。尝试使用LIKE而不是IS – albanx 2011-02-14 22:52:45
一注。将字符串字段设置为非空值并且不用担心这样的问题是值得的。添加OR或ISNULL或COALESCE可以真正达到性能。 – LukLed 2011-02-14 23:14:54
@LukLed - 在我的答案中看到执行计划`OR`在那里似乎没有问题。 `WHERE [Column2] = @ Column2 OR(@ Column2 IS NULL AND [Column2] IS NULL)`似乎是一个可识别的模式,最后只是一个简单的索引查找。 – 2011-02-14 23:18:00