LIKE и NULL в предложении WHERE в SQL

у меня есть хранимая процедура, которую я планировала использовать для поиска и получения всех значений.

сценарий: Если передан параметр 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+'%' 

в приведенном выше запросе он не возвращает значений при выполнении с NULL считается string by SQL, так что я должен написать в where пункт, чтобы получить желаемый результат?

3 ответов


Вы можете использовать условие, как это в вас where п.

where @Keyword is null or CustomerName like '%' + @Keyword + '%' 

Я просто хочу указать другой способ решения этой проблемы. Вопрос в том, что значение по умолчанию для @KeyWord is NULL. Если изменить значение по умолчанию на '', тогда проблема исчезнет:

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

любое ненулевое имя клиента будет похоже на"%%".


вам просто нужно добавить 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+'%'