Gibt es in T-SQL einen ternären bedingten Operator?

112

Welche Alternativen gibt es, um die folgende Abfrage zu implementieren:

select *  
from table  
where isExternal = @type = 2 ? 1 : 0
Anthony
quelle
4
Die Antwort auf die Frage, die Sie in Ihrem Titel stellen, lautet natürlich - natürlich. Der BETWEENOperator ist so definiert, dass er drei Argumente akzeptiert. Was Sie gesucht haben, war ein bedingter Operator - der zufällig der einzige Operator ist, der drei Argumente akzeptiert, die von den meisten Sprachen definiert wurden.
Damien_The_Unbeliever
1
@JFA - Nein, ein ternärer Operator ist ein Operator, der drei Operanden akzeptiert . Wenn sie in den meisten Sprachen ternäre Operatoren haben, ist es üblich, dass sie nur einen haben, der (allgemein) als bedingter Operator bezeichnet wird. Das Aufrufen von Dingen mit dem falschen Namen (oder die Verwendung eines allgemeinen Namens, wenn Sie einen bestimmten Namen meinen) kann nur zu mehr Verwirrung führen. Weitere Anleitungen finden Sie im Wiki für ternäre Operatoren .
Damien_The_Unbeliever
@Damien_The_Unbeliever en.wikipedia.org/wiki/Ternary_operation : siehe "Der ternäre Operator"
Timothy Kanski
@TimothyKanski - Denken Sie angesichts des Inhalts und des Stils meiner vorherigen Kommentare (z. B. der besonderen Betonung des a ), dass ich mir dessen nicht bewusst bin?
Damien_The_Unbeliever
6
OP verwendete den gebräuchlichen Namen für eine Sache, nicht den falschen oder zu allgemeinen Namen. Ich bin mit Ihrer Schlussfolgerung nicht einverstanden, dass Fachleute (für die diese Website erstellt wurde) dadurch verwirrt werden, wenn es sich tatsächlich um eine häufig verwendete Terminologie handelt.
Timothy Kanski

Antworten:

122

Verwendung case:

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

In SQL Server 2012 können Sie die folgende IIFFunktion verwenden :

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

Beachten Sie auch: In T-SQL ist der Zuweisungs- (und Vergleichs-) Operator nur =(und nicht ==- das ist C #).

marc_s
quelle