SQL中的WHERE子句中的LIKE和NULL

时间:2013-09-08 12:11:36

标签: sql sql-server sql-server-2008 where-clause sql-like

我有一个商店程序,我计划用于搜索并获取所有值。

情境: 如果传递的参数是NULL,它应该返回表的所有值,如果传递的参数不是NULL,它应该根据LIKE中的条件返回值。

//查询:

ALTER procedure [dbo].[usp_GetAllCustomerDetails]
(
@Keyword nvarchar(20) =  null
)
As
Begin

Select CustomerId,CustomerName,CustomerTypeName,CustomerCode,CategoryName,CustomerMobile,CustomerEmail,CustomerAddress,CustomerCity,CustomerState,Pincode
from tblCustomerMaster CM
inner join dbo.tblCustomerTypeMaster CTM on CTM.CustomerTypeId = CM.CustomerType
inner join dbo.tblCategoryMaster CCM on CCM.CategoryId= CM.CustomerCategory
where CustomerName like '%'+@Keyword+'%' 

在上面的查询中,我执行i时没有返回任何值,因为NULLstring假设为SQL,所以我应该在where子句中写什么获得所需的输出?

3 个答案:

答案 0 :(得分:20)

您可以在where子句

中使用这样的条件
where @Keyword is null or CustomerName like '%' + @Keyword + '%' 

答案 1 :(得分:4)

我只是想指出解决这个问题的另一种方法。问题是@KeyWord的默认值为NULL。如果您将默认值更改为'',则问题就会消失:

ALTER procedure [dbo].[usp_GetAllCustomerDetails]
(
@Keyword nvarchar(20) = ''
)

任何非NULL客户名称都会像'%%'。

答案 2 :(得分:1)

您只需要将SET @Keyword = coalesce(@Keyword,'')添加到您的程序中:

 ALTER procedure [dbo].[usp_GetAllCustomerDetails]
(
@Keyword nvarchar(20) =  null
)
As
Begin
SET @Keyword = coalesce(@Keyword,'')

Select CustomerId,CustomerName,CustomerTypeName,CustomerCode,CategoryName,CustomerMobile,CustomerEmail,CustomerAddress,CustomerCity,CustomerState,Pincode
from tblCustomerMaster CM
inner join dbo.tblCustomerTypeMaster CTM on CTM.CustomerTypeId = CM.CustomerType
inner join dbo.tblCategoryMaster CCM on CCM.CategoryId= CM.CustomerCategory
where CustomerName like '%'+@Keyword+'%'