2013-04-25 11 views
68

Welche Alternativen die folgende Abfrage zu implementieren:Gibt es in T-Sql einen ternären Operator?

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

Natürlich ist die Antwort auf die Frage, die Sie in Ihrem Titel stellen, - natürlich. Der [BETWEEN'] (https://msdn.microsoft.com/en-us/library/ms187922.aspx) Operator ist definiert, um drei Argumente zu nehmen. Was Sie gesucht haben, war ein * Bedingungsoperator * - was * passiert * als einziger Operator definiert ist, um drei Argumente zu verwenden, die von den meisten Sprachen definiert werden. –

+0

@JFA - nein, * a * ternärer Operator ist jeder Operator, der drei Operanden benötigt. In den meisten Sprachen, wenn sie Ternäroperatoren haben, ist es üblich, dass sie nur einen haben, der (allgemein) der Bedingungsoperator genannt wird. Wenn Sie Dinge mit dem falschen Namen aufrufen (oder einen allgemeinen Namen verwenden, wenn Sie eine bestimmte Bedeutung haben), kann das zu mehr Verwirrung führen. Weitere Informationen finden Sie im Wiki-Tag [tag: ternary-operator]. –

+0

@Damien_The_Unbeliever https://en.wikipedia.org/wiki/Ternary_operation: siehe "Der ternäre Operator" –

Antwort

81

Verwendung case:

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

In SQL Server , könnten Sie die IIF function:

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

Beachten Sie auch, : In T-SQL ist der Operator für die Zuweisung (und den Vergleich) nur = (und nicht == - das ist C#)

Verwandte Themen