Existe-t-il un opérateur conditionnel ternaire dans T-SQL?

112

Quelles sont les alternatives pour implémenter la requête suivante:

select *  
from table  
where isExternal = @type = 2 ? 1 : 0
Anthony
la source
4
Bien sûr, la réponse à la question que vous posez dans votre titre est - bien sûr. L' BETWEENopérateur est défini pour prendre trois arguments. Ce que vous recherchiez était un opérateur conditionnel - qui se trouve être le seul opérateur défini pour prendre trois arguments définis par la plupart des langues.
Damien_The_Unbeliever
1
@JFA - non, un opérateur ternaire est tout opérateur qui prend trois opérandes. Dans la plupart des langages, s'ils ont des opérateurs ternaires, il est courant qu'ils n'en aient qu'un, qui est (généralement) appelé l'opérateur conditionnel. Appeler des choses par un mauvais nom (ou utiliser un nom général lorsque vous parlez d'un particulier) peut simplement conduire à plus de confusion. Pour plus d'informations, veuillez consulter le wiki des balises de l' opérateur ternaire .
Damien_The_Unbeliever
@Damien_The_Unbeliever en.wikipedia.org/wiki/Ternary_operation : voir "L'opérateur ternaire"
Timothy Kanski
@TimothyKanski - pensez-vous, compte tenu du contenu et du style de mes commentaires précédents (par exemple en mettant un accent particulier sur le a ) que je ne suis pas au courant de cela?
Damien_The_Unbeliever
6
OP a utilisé le nom commun d'une chose, pas son nom erroné ou trop général. Je ne suis pas d'accord avec votre conclusion selon laquelle les professionnels (pour qui ce site a été construit) seront déroutés par cela, alors qu'il s'agit en effet d'une terminologie couramment utilisée.
Timothy Kanski du

Réponses:

122

Utilisez case:

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

Dans SQL Server 2012 , vous pouvez utiliser la IIFfonction :

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

Notez également: dans T-SQL, l'opérateur d'affectation (et de comparaison) est juste =(et non ==- c'est C #)

marc_s
la source