Поиск уникального идентификатора в CASE THEN-clause + wildcard - PullRequest
0 голосов
/ 03 января 2011

Я не могу найти какую-либо информацию об этом, несмотря на серьезные поиски.Если я пропустил предыдущий пост об этом, извините.

В любом случае, я спрашиваю мою базу данных (sql server 2008) о наборе, где в качестве параметра есть уникальный идентификатор.Однако, если входной параметр равен нулю, я хочу, чтобы все возвращали все сообщения.Я попытаюсь показать это в коде, возможно, легче понять суть таким образом:

select * from ongoing_tbl_ongoing where ongoingState like
    case when @inParameter is null then 
        '%'              --This is where things go haywire
    else
        @inParameter     --This is a uniqueidentifier type (Guid)
    end
    or ongoingState is null    

Но это с треском проваливается (преобразование не удалось при преобразовании строки символов в uniqueidentifier.)

Забавно то, что ... работает следующий код:

select * from ongoing_tbl_ongoing where ongoingState like '%'

Кажется, что предложение CASE вызывает приведение или каким-то другим способом удерживает меня от подстановочного поиска по уникальным идентификаторам.Любые указатели будут высоко оценены.Скажите, пожалуйста, если вам нужна дополнительная информация.

С наилучшими пожеланиями
-K

Ответы [ 2 ]

0 голосов
/ 03 января 2011

Если вы хотите использовать регистр

select *    
from     
  ongoing_tbl_ongoing     
where     
  ongoingState is null     
or    
  ongoingState =    
    case when @inParameter is null then ongoingState
    else         @inParameter   
    end 
0 голосов
/ 03 января 2011

Проблема в том, что '%' и @inParameter должны иметь одинаковый тип данных.Таким образом, вы могли бы привести @inParameter к VARCHAR или использовать этот запрос вместо этого?

SELECT *
FROM ongoing_tbl_ongoing
WHERE ongoingState IS NULL OR
      @inParameter IS NULL OR
      ongoingState LIKE @inParameter
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...