Existe um operador condicional ternário no T-SQL?

112

Quais são as alternativas para implementar a seguinte consulta:

select *  
from table  
where isExternal = @type = 2 ? 1 : 0
Anthony
fonte
4
Claro, a resposta à pergunta que você coloca em seu título é - claro. O BETWEENoperador é definido para receber três argumentos. O que você estava procurando era um operador condicional - que por acaso é o único operador definido para receber três argumentos definidos pela maioria das linguagens.
Damien_The_Unbeliever
1
@JFA - não, um operador ternário é qualquer operador que leve três operandos. Na maioria das linguagens, se eles têm quaisquer operadores ternários, é comum que eles tenham apenas um, que é (geralmente) chamado de operador condicional. Chamar as coisas pelo nome errado (ou usar um nome genérico quando se refere a um específico) pode simplesmente levar a mais confusão. Para obter mais orientações, consulte o wiki de tags do operador ternário .
Damien_The_Unbeliever
@Damien_The_Unbeliever en.wikipedia.org/wiki/Ternary_operation : veja "O operador ternário"
Timothy Kanski
@TimothyKanski - você acha que, considerando o conteúdo e estilo dos meus comentários anteriores (como colocar especial ênfase na a ) que eu sou desconhecem isso?
Damien_The_Unbeliever
6
OP usava o nome comum para uma coisa, não seu nome errado ou muito geral. Não concordo com a sua conclusão de que os profissionais (para os quais este site foi construído) ficarão confusos com isso, quando na verdade é uma terminologia comum.
Timothy Kanski

Respostas:

122

Use case:

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

No SQL Server 2012 , você pode usar a IIFfunção :

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

Observe também: no T-SQL, o operador de atribuição (e comparação) é apenas =(e não ==- é C #)

marc_s
fonte