Apakah pernyataan SQL Server (2008 atau 2012, khusus) CASE
mengevaluasi semua WHEN
kondisi atau apakah itu keluar setelah menemukan WHEN
klausa yang mengevaluasi ke true? Jika ia melewati seluruh rangkaian kondisi, apakah itu berarti bahwa kondisi terakhir yang mengevaluasi true menimpa apa yang dilakukan kondisi pertama yang dievaluasi ke true? Sebagai contoh:
SELECT
CASE
WHEN 1+1 = 2 THEN'YES'
WHEN 1+1 = 3 THEN 'NO'
WHEN 1+1 = 2 THEN 'NO'
END
Hasilnya adalah "YA" meskipun kondisi terakhir ketika harus membuatnya mengevaluasi menjadi "TIDAK". Tampaknya keluar setelah menemukan kondisi BENAR pertama. Dapatkah seseorang tolong konfirmasi jika ini masalahnya .
sql-server
t-sql
case
Juan Velez
sumber
sumber
COALESCE()
yang diterjemahkan ke dalamCASE
ekspresi.)Jawaban:
• Mengembalikan result_expression dari input_expression pertama = when_expression yang mengevaluasi ke TRUE .
Referensi http://msdn.microsoft.com/en-us/library/ms181765.aspx
Ini adalah perilaku SQL standar:
Sebuah
CASE
ekspresi mengevaluasi kondisi pertama benar.Jika tidak ada kondisi yang benar, itu mengevaluasi ke
ELSE
bagian itu.Jika tidak ada kondisi sebenarnya dan tidak ada
ELSE
bagian, itu dievaluasi untukNULL
.sumber
SQL Server biasanya melakukan evaluasi hubung singkat untuk pernyataan KASUS ( SQLFiddle ):
Namun ada beberapa jenis pernyataan bahwa pada SQL Server 2012 tidak melakukan hubungan pendek dengan benar. Lihat tautan dari ypercube di komentar.
Oracle selalu melakukan evaluasi hubung singkat . Lihat 11.2 Referensi Bahasa SQL . Atau bandingkan yang berikut ( SQLFiddle ):
Tes yang sama ini tidak dapat dilakukan dengan MySQL karena mengembalikan NULL untuk pembagian dengan nol. ( SQL Fiddle )
sumber
Tampaknya MS SQL Server menggunakan evaluasi hubung singkat juga.
Dalam tes berikut ini saya memiliki 3 tes. Yang pertama selalu benar, yang kedua gagal tanpa mereferensikan tabel, dan yang ketiga gagal hanya ketika data diperhitungkan.
Dalam menjalankan khusus ini kedua baris dikembalikan dengan sukses. Jika saya berkomentar KAPAN pertama, atau yang pertama dan kedua maka saya mendapatkan kegagalan.
sumber
jika pernyataan kasus yang digunakan dalam
WHERE
kondisi dan kasus pertama ketika pernyataan melibatkan evaluasi nilai kolom dari tabel, dan baris pertama dalam tabel tidak memenuhi kondisi ini, pernyataan kasus akan pergi ke kasus berikutnya saat pernyataan.sumber
Di MySQL, ini akan keluar dari pernyataan kasus pada opsi true pertama. Jika Anda memiliki kemungkinan beberapa nilai benar, Anda ingin menempatkan jawaban pilihan sebelumnya dalam urutan.
sumber