SQL其中逻辑参数化的位置

时间:2015-03-30 18:59:07

标签: sql sql-server sqlparameters

我正在尝试在SQL 2008中使用COALESCE创建一个参数化的where语句,我有一个例子:

Select * 
From Receipts 
Where Receipts.FunctionCode = COALESCE(@FunCode, Receipts.FunctionCode)

希望如果我在@FunCode中传入NULL,它将拉出所有7050条记​​录。然而它只能拉回236条记录,就好像它在哪里: Receipts.FunctionCode = Receipts.FunctionCode

有人可以解释一下我的逻辑错误吗?对我来说,这个where语句应该总是100%回到数据库

1 个答案:

答案 0 :(得分:3)

这是由NULL列中显示的FunctionCode值导致的。这将使用FunctionCode上创建的索引(如果有的话)

Select * 
From Receipts 
Where Receipts.FunctionCode = @FunCode or @FunCode IS NULL