Apakah ada operator kondisional terner di T-SQL?

112

Apa alternatif untuk menerapkan kueri berikut ini:

select *  
from table  
where isExternal = @type = 2 ? 1 : 0
Anthony
sumber
4
Tentu saja, jawaban atas pertanyaan yang Anda ajukan dalam judul Anda adalah - tentu saja. The BETWEENOperator didefinisikan untuk mengambil tiga argumen. Apa yang Anda cari adalah operator bersyarat - yang kebetulan menjadi satu-satunya operator yang ditentukan untuk mengambil tiga argumen yang ditentukan oleh sebagian besar bahasa.
Damien_The_Unbeliever
1
@JFA - tidak ada, sebuah operator ternary adalah setiap operator yang mengambil tiga operan. Di kebanyakan bahasa, jika mereka memiliki operator terner, biasanya mereka hanya memiliki satu, yaitu (umumnya) disebut operator bersyarat. Menyebut sesuatu dengan nama yang salah (atau menggunakan nama umum ketika Anda bermaksud tertentu) dapat menyebabkan lebih banyak kebingungan. Untuk panduan lebih lanjut, silakan baca wiki tag operator-terner .
Damien_The_Unbeliever
@Damien_The_Unbeliever en.wikipedia.org/wiki/Ternary_operation : lihat "THE ternary operator"
Timothy Kanski
@TimothyKanski - menurut Anda, dengan mempertimbangkan konten dan gaya komentar saya sebelumnya (seperti memberikan penekanan khusus pada a ) bahwa saya tidak menyadarinya?
Damien_The_Unbeliever
6
OP menggunakan nama yang umum untuk suatu hal, bukan nama yang salah atau terlalu umum. Saya tidak setuju dengan kesimpulan Anda bahwa para profesional (untuk siapa situs ini dibangun) akan bingung dengan ini, padahal terminologi itu memang umum digunakan.
Timothy Kanski

Jawaban:

122

Penggunaan case:

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

Di SQL Server 2012 , Anda dapat menggunakan IIFfungsi :

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

Perhatikan juga: di T-SQL, operator penugasan (dan perbandingan) hanya =(dan bukan ==- itu C #)

marc_s
sumber