我有一个商店程序,我计划用于搜索并获取所有值。
情境:
如果传递的参数是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时没有返回任何值,因为NULL
被string
假设为SQL
,所以我应该在where
子句中写什么获得所需的输出?
答案 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+'%'