Условие в предложении Где - SQL Server - PullRequest
1 голос
/ 20 августа 2009

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

Пример:

declare @number nvarchar(200)
set @number = '2ddafa3'

Здесь @number может быть int или uniqueIdentifer

Итак, где пункт о том, как я могу достичь чего-то, как показано ниже.

select * from IntegrationIDTransactions
where case ISNUMERIC(@number) 
            When 1  Then [TransactioniD] = @number
            else [TransactionDomainGuid] = @number

Спасибо

Ответы [ 2 ]

4 голосов
/ 20 августа 2009

Это должно работать:

where @number = 
    case ISNUMERIC(@number) 
        when 1 then cast([TransactioniD] as varchar(200))
        else cast([TransactionDomainGuid] as varchar(200))
    end

Отредактировано, чтобы добавить актерский состав. Актерский состав должен быть внутри ДЕЛА; SQL-сервер требует, чтобы все пути дела приводили к одному и тому же типу переменной.

2 голосов
/ 20 августа 2009

Вы должны избегать таких конструкций и вместо этого иметь два запроса, один для WHERE TransactionId и один для WHERE TransactionDomainGuid:

if ISNUMERIC(@number)
  select * from IntegrationIDTransactions
  where [TransactioniD] = @number
else 
  select * from IntegrationIDTransactions
  else [TransactionDomainGuid] = @number

Еще лучше, пусть клиент выполнит IF и вызовет соответствующий запрос. Написание запросов, подобных приведенному в вашем примере, снижает производительность, результат не вызывает сомнений и обычно создает худший план выполнения для в обоих случаях.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...