2015-03-30 79 views
1

所以我试图创建一个参数,我声明在2008年使用SQL COALESCE,并有例子:SQL逻辑在哪里哪里参数化

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

的希望,如果我在NULL传递@FunCode ,它将拉动所有7050条记​​录。然而,它只能拉回236条记录,并且与之相同: Where Receipts.FunctionCode = Receipts.FunctionCode

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

+0

好,还有值,其中'Receipts.FunctionCode'是'NULL'? – Lamak 2015-03-30 19:00:24

+0

SQL中的Null = Null不成立。 – Laurence 2015-03-30 19:01:59

回答

3

这是由于FunctionCode列中存在的NULL值代替了此值。上创建这将使用索引FunctionCode如有

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