Ответ 1
Вы можете использовать условие, подобное этому в where
разделе
where @Keyword is null or CustomerName like '%' + @Keyword + '%'
У меня есть процедура хранения, которую я планировал использовать для поиска и получить все значения.
Сценарий:
Если переданный параметр равен 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
, чтобы получить желаемый результат?
Вы можете использовать условие, подобное этому в where
разделе
where @Keyword is null or CustomerName like '%' + @Keyword + '%'
Я просто хочу указать другой способ решения этой проблемы. Проблема в том, что значение по умолчанию для @KeyWord
равно NULL
. Если вы измените значение по умолчанию на ''
, проблема исчезнет:
ALTER procedure [dbo].[usp_GetAllCustomerDetails]
(
@Keyword nvarchar(20) = ''
)
Любое имя пользователя, отличное от NULL, будет тогда "%%".
Вам просто нужно добавить 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]+'%'