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 '%'[email protected]+'%' 

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

Ответ 1

Вы можете использовать условие, подобное этому в where разделе

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

Ответ 2

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

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

Любое имя пользователя, отличное от NULL, будет тогда "%%".

Ответ 3

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