我在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