2013-04-25 2 views
68

Какие альтернативы реализуют следующий запрос:Есть тройной оператор в T-Sql?

select * 
from table 
where isExternal = @type = 2 ? 1 : 0 
+2

Конечно, ответ на вопрос, который вы задаете в своем названии, - конечно. Оператор ['BETWEEN'] (https://msdn.microsoft.com/en-us/library/ms187922.aspx) определен для принятия трех аргументов. То, что вы искали, было оператором * conditional *, который * бывает * единственным оператором, определяющим три аргумента, определенные большинством языков. –

+0

@JFA - нет, * a * тернарный оператор - любой оператор, который принимает три операнда. В большинстве языков *, если * у них есть любые тернарные операторы, обычно бывает, что у них есть только один, который (как правило) называется условным оператором. Вызывать вещи по неправильному имени (или используя общее название, когда вы имеете в виду конкретный), может привести к большей путанице. Для получения дополнительной информации обратитесь к тэгам wiki тега [tag: ternary-operator]. –

+0

@Damien_The_Unbeliever https://en.wikipedia.org/wiki/Ternary_operation: см. «Тернарный оператор» –

ответ

81

Использование case:

select * 
from table 
where isExternal = case @type when 2 then 1 else 0 end 
104

В SQL Server , вы могли бы использовать IIF function:

SELECT * 
FROM table 
WHERE isExternal = IIF(@type = 2, 1, 0) 

Также обратите внимание на : в T-SQL оператор присваивания (и сравнения) равен = (а не == - это C#)

Смежные вопросы