我正在SQL中编写一个存储过程,其中我有一个方案,如果参数为null,则获取所有记录;如果参数不为null,则获取匹配记录。在这种情况下,我总是使用ISNULL函数:
1458238937
但是在这种情况下,如果value不为null,则它可以正常工作,但如果value为null,则它将获取除table.value为null之外的所有记录。所以我搜索并找到了一个由sII回答的解决方案here。但我不明白这个说法
table.value = ISNULL(@param,table.value)
它适用于我,但我无法理解?这个怎么运作?在此先感谢您的回答。
答案 0 :(得分:3)
以下是我对ALL IF NULL
声明的理解。
案例1:如果参数@param
为NULL
。
在这种情况下,All if NULL
语句变为这样,
NULL IS NULL OR value= @param.
此处left
语句的OR
部分变为True
,因此记录将根据该部分进行提取。所以查询变为,
SELECT *FROM TABLE WHERE NULL IS NULL
与...相同
SELECT *FROM TABLE.
因此它将获取所有记录。
案例2:如果参数@param
具有值(比如值= 1)
在这种情况下,All if NULL
语句变为这样,
1 IS NULL OR value= 1.
此处left
语句的OR
部分变为False
,因此记录将根据right
部分进行提取。
所以查询变为,
SELECT *FROM TABLE WHERE value= 1.
希望你明白现在......