Вы могли бы использовать:
DECLARE @ComplainantName varchar(100),
@ComplaitSubject varchar(MAX);
Select *
from ComplaintsInfo
where (ComplainantName = @ComplainantName OR @ComplainantName IS NULL)
AND (ComplaitSubject = @ComplaitSubject OR @ComplaitSubject IS NULL);
-- @ComplainantName/Subject = '' if empty string indicates missing value
Если вы хотите найти используя только один параметр, передайте второй как NULL
. Таким образом, можно фильтровать с помощью:
╔══════════════════╦══════════════════╦═════════════════════════════════════════════════════════════════╗
║ @ComplainantName ║ @ComplaitSubject ║ result ║
╠══════════════════╬══════════════════╬═════════════════════════════════════════════════════════════════╣
║ NULL ║ NULL ║ all ║
║ NULL ║ val ║ records with ComplaitSubject='val' ║
║ val ║ NULL ║ records with ComplainantName='val' ║
║ val1 ║ val2 ║ records with ComplaitSubject='val1' and ComplainantName='val2' ║
╚══════════════════╩══════════════════╩═════════════════════════════════════════════════════════════════╝
EDIT:
Я также попытался это и кажется, работает сейчас, это нормально? Выберите * из ComplaintsInfo где ComplainantName как '%' + @ComplainantName + '%' и COmplaintSubejct как '%' + @ ComplaintSubject + '%'
Да, вы можете изменить ComplainantName = @ComplainantName
с ComplainantName like '%'+ @ComplainantName +'%'
, но вы должны знать, что выражение, начинающееся с подстановочным знаком не является допустимым. Если это индекс в этом оптимизаторе запросов столбца, он пропустит его.
Select *
from ComplaintsInfo
where (ComplainantName like '%'[email protected]+'%' OR @ComplainantName IS NULL)
AND (ComplaitSubject like '%'[email protected]+'%' OR @ComplaitSubject IS NULL);
Вы также могли бы рассмотреть возможность использования FULL-TEXT INDEX
для струнного поиска.
Хорошо, спасибо большое, я тоже попробую. Я также пробовал это и, похоже, сейчас работает, все в порядке? Выберите * from ComplaintsInfo , где Истец-имя как '%' + @ComplainantName + '%' AND COmplaintSubejct как '%' + @ ComplaintSubject + '%' –
@StackyFlowy Вам нужно обрабатывать «NULL»/отсутствующие значения. Если пользователь передает 'ComplainantName = NULL', вы не получите никаких записей. – lad2025