SQL Server: Menggunakan ungkapan CASE WHEN dengan klausa WHERE
P粉270842688
P粉270842688 2024-04-03 14:46:55
0
1
394

Saya mempunyai projek Spring Boot baharu dengan SQL Server dan saya perlu menggantikan pertanyaan asli MySQL pada kaedah repositori dalam projek lama dengan pertanyaan asli SQL Server. Ini adalah pertanyaan kompleks di mana keadaan adalah kes apabila ekspresi. Apabila saya cuba menguji pertanyaan dalam SQL Server Management Studio, ia memaparkan ralat seperti yang ditunjukkan dalam imej di bawah. Masukkan penerangan imej di sini

Ini adalah pertanyaan asli lama saya menggunakan MySQL pada kaedah repositori dan saya mahu menggantikannya dengan SQL Server Masukkan penerangan imej di sini Tolong bantu saya mencari penyelesaian. Terima kasih terlebih dahulu! !

P粉270842688
P粉270842688

membalas semua(1)
P粉904191507

Ini adalah perkara yang anda ada dan perkara yang perlu anda siarkan sebagai teks dalam soalan anda. Sebagai teks, ia boleh dicari dan disalin oleh seseorang yang cuba membantu anda.

case when @num = 1 then p.merchant_name = @query else 1=1 end

CASE ialah ungkapan dalam TSQL. Ia bukan binaan kawalan aliran seperti kebanyakan bahasa lain. Untuk menggunakan penapis "pilihan", anda perlu menggunakan CASE untuk membina ungkapan boolean yang mengendalikan atribut "pilihan" dengan betul. Biasanya, ini boleh dilakukan dengan lebih canggih menggunakan CASE, seperti ini:

case when @num = 1 and p.merchant_name  @query then 0 else 1 end = 1

Jadi CASE digunakan di sini untuk mengembalikan nilai yang boleh diuji dalam perbandingan. Tiada apa-apa yang ajaib tentang menggunakan 0 atau 1. Gunakan sebarang nilai dalam apa jua jenis.

  • Apabila @num ialah 1 dan nilai tidak sepadan, kembalikan cawangan THEN (0).
  • Apabila @num ialah 1 dan nilainya sepadan, kembalikan cawangan ELSE (1).
  • Apabila @num bukan 1, kembalikan cawangan LAIN (1).

Jadi apabila ungkapan CASE mengembalikan 0 (bukan sebenarnya 1), baris diabaikan (dialih keluar daripada set hasil).

Memandangkan pertanyaan anda sebenarnya dibina dalam aplikasi, anda harus mempertimbangkan untuk membina pertanyaan secara dinamik dan menambah parameter mengikut keperluan. Ini mungkin menghasilkan pertanyaan yang lebih cekap yang boleh dioptimumkan oleh enjin pangkalan data dengan lebih baik. Sebagai alternatif, anda boleh menyemak Perbincangan Sinki Dapur ini dan perbincangan Erland tentang Kriteria Carian Dinamik. TBH kelihatan seperti seseorang menggunakan @num sebagai tampalan untuk mengelakkan penambahan parameter untuk lapan nilai penapis tertentu. Jika saya ingin menapis kedua-dua nama pedagang dan nama kedai, saya tidak boleh menggunakan kaedah ini.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!