2014-02-03 3 views
5

SQL-запрос:Как использовать тернарный оператор в SQL Server 2008?

SELECT * 
FROM Account 
WHERE (type <>100000002 ? Id='something': Id=null) 

но он показывает сообщение об ошибке: '?'

Неправильный синтаксис около

Пожалуйста, помогите мне.

+2

дорогой способ не использовать СЛУЧАЙ Постулаты или IF Else – Developerzzz

+0

если вам нужен пример или случай или IF Else, то дайте мне знать, я пошлю вам пример – Developerzzz

+0

'где (тип <> 100000002 и Id =» что-то ') или (type = 100000002 и id равно null) ' –

ответ

8

Это для SQL Server. IIF недоступен в SQL Server 2008 или ранее.

SELECT * 
    FROM Account 
    WHERE 
    Id=IIF(type<> 100000002,"something",null) 

Если вы используете SQL Server 2008 или ранее, попробуйте это.

SELECT * 
    FROM Account 
    WHERE (Id= CASE WHEN type <>100000002 THEN 'something' ELSE null END) 
+0

Если вы рассмотрите лучшие практики, вам следует избегать использования IIF, потому что его функция и она медленнее, чем оператор CASE WHEN –

5

Вы можете сделать это:

SELECT * 
FROM Account 
where (type <>100000002 and Id='something') or (type =100000002 and id is null) 

или

SELECT * 
FROM Account 
where isnull(id,'_null_')= case when type <>100000002 then 'something' else isnull(id,'_null_') end 
+2

+1 для 'null. –

+1

+1 для первого T-SQL, Simple T-SQL для простой логики – Punter015

+0

@ Punter015 Спасибо. –

2
SELECT * 
FROM Account 
WHERE (Id= CASE WHEN type <>100000002 THEN 'something' ELSE null END) 
+0

вы всегда не делаете 'id = null' –

+2

Однако обратите внимание, что с нулевыми значениями ANSI это, вероятно, не будет работать так, как предполагалось, так как' null = null' фактически является ложным. Вместо этого вы должны использовать 'Id is null'. – Luaan

+0

@RoyiNamir - Да, я видел ваш второй запрос в вашем ответе. Спасибо ... –

1

Используйте следующие:

SELECT * 
FROM Account 
WHERE (Id= CASE WHEN type != 100000002 THEN 'something' ELSE null END) 

или

SELECT * 
FROM Account 
WHERE (Id= CASE WHEN type <> 100000002 THEN 'something' ELSE null END) 
1
SELECT * 
FROM Account 
where (type <>100000002 and Id='something') or (type =100000002) 
Смежные вопросы