Как использовать LIKE в sp_executesql? Я не могу построить утверждение - PullRequest
0 голосов
/ 25 ноября 2010

Я хочу использовать LIKE в sp_executesql, но не могу сконструировать оператор, Я получаю ошибки, это простой пример, чтобы показать случай:

SELECT @SqlStatement = @SqlStatement +    
   (CASE @SearchType  
    WHEN 'L' THEN  
      + N' AND aa.Location = COALESCE(@SearchCriteria, '''') '
    WHEN 'M' THEN
 + N' AND aa.ManufactureName LIKE COALESCE(@SearchCriteria, '''') '
    WHEN 'P' THEN  
      + N' AND OH.PONumber = COALESCE(@SearchCriteria, '''')'
   END) 

Ответы [ 4 ]

1 голос
/ 25 ноября 2010

удаляет знак плюс после THEN

WHEN 'x' THEN  N'some X'

конкатенация строк выполняется знаком плюс в первой строке, а выражение CASE просто содержит второй операнд.

1 голос
/ 25 ноября 2010

Подумайте о записи Процедура Не запрос.

0 голосов
/ 25 ноября 2010
WHERE
(
   (@SearchType = 'L'
      AND aa.Location = @SearchCriteria)
   OR (@SearchType = 'M'
      AND aa.ManufactureName LIKE REPLACE(@SearchCriteria, '%', '[%]') + '%')
   OR (@SearchType = 'P'
      AND OH.PONumber = @SearchCriteria)
)
0 голосов
/ 25 ноября 2010

Как сказал devio, вам нужно убрать знак плюс после предложения THEN.Кроме того, если @SearchCriteria является параметром, который вы получаете, например @SearchType, то вам также необходимо объединить его значение и не использовать его внутри оператора, который вы создаете.Ваш запрос должен выглядеть примерно так:

SELECT @SqlStatement = @SqlStatement +    
   (CASE @SearchType  
    WHEN 'L' THEN  
       N' AND aa.Location = COALESCE('''+@SearchCriteria+''', '''') '
    WHEN 'M' THEN
  N' AND aa.ManufactureName LIKE COALESCE(''%'+@SearchCriteria+'%'', '''') '
    WHEN 'P' THEN  
       N' AND OH.PONumber = COALESCE('''+@SearchCriteria+''', '''')'
   END) 
...