2013-04-25 21 views
68

Quali sono le alternative per attuare la seguente query:Esiste un operatore ternario in T-Sql?

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

Ovviamente, la risposta alla domanda che poni nel titolo è - ovviamente. L'operatore ['BETWEEN'] (https://msdn.microsoft.com/en-us/library/ms187922.aspx) è definito per accettare tre argomenti. Quello che stavi cercando era un operatore * condizionale * - che * accade * per essere l'unico operatore definito a prendere tre argomenti definiti dalla maggior parte delle lingue. –

+0

@ JFA - no, * un * operatore ternario è un operatore che accetta tre operandi. Nella maggior parte delle lingue, * se * hanno operatori ternari, è comune che ne abbiano solo uno, che è (generalmente) chiamato operatore condizionale. Chiamare le cose con il nome sbagliato (o usare un nome generico quando intendi uno specifico) può solo portare a maggiore confusione. Per ulteriori indicazioni, consultare il tag [tag: ternary-operator] wiki. –

+0

@Damien_The_Unbeliever https://en.wikipedia.org/wiki/Ternary_operation: vedi "THE ternary operator" –

risposta

81

Uso case:

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

In SQL Server , è possibile utilizzare il IIF function:

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

noti inoltre : in T-SQL, l'operatore di assegnazione (e confronto) è solo = (e non == - questo è C#)