У меня есть следующий запрос, в котором я выбираю, где столбец varchar содержит любое из пяти, необязательных ключевых слов, переданных в сохраненный процесс.ли столбцы varchar содержат необязательный диапазон ключевых слов
@keyword1 varchar(100) = null
@keyword2 varchar(100) = null
@keyword3 varchar(100) = null
@keyword4 varchar(100) = null
@keyword5 varchar(100) = null
SELECT supplier_code
FROM crm_cache
WHERE (@keyword1 IS NULL OR crm_cache.search_string LIKE ('%' + @keyword1 + '%'))
OR (@keyword2 IS NULL OR crm_cache.search_string LIKE ('%' + @keyword2 + '%'))
OR (@keyword3 IS NULL OR crm_cache.search_string LIKE ('%' + @keyword3 + '%'))
OR (@keyword4 IS NULL OR crm_cache.search_string LIKE ('%' + @keyword4 + '%'))
OR (@keyword5 IS NULL OR crm_cache.search_string LIKE ('%' + @keyword5 + '%'))
Он работает и возвращает правильно, когда все пять ключевых слов, которые были приняты и не пусты, но если поставить ключевые слова 1 и 2, оставляя 3,4 и 5 по умолчанию нулевое значение. Возвращенные данные являются массивными и неверными.
Если удалить нулевое положение и установить ключевые слова 1 и 2, как показано ниже, я получаю правильные данные, которые три строки
@keyword1 varchar(100) = 'ruby'
@keyword2 varchar(100) = 'silver cross'
@keyword3 varchar(100) = null
SELECT supplier_code
FROM crm_cache
WHERE (@keyword1 IS NULL OR crm_cache.search_string LIKE ('%' + @keyword1 + '%'))
OR (@keyword2 IS NULL OR crm_cache.search_string LIKE ('%' + @keyword2 + '%'))
, но с пунктом, который имеет нулевую переменную как ключевое слово 3, я получаю сотни строк возвращены
Как я должен реализовать такой запрос, который имеет необязательные параметры для сравнения с одним столбцом?
Должен ли я использовать Содержит вместо LIKE?
Вы видите, где моя логика неверна в условиях?
Кажется, что нужно работать. Не могу поверить, что это было так просто. –