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+'%'