Rumah  >  Soal Jawab  >  teks badan

SQL Server: Menggunakan ungkapan CASE WHEN dengan klausa WHERE

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粉270842688P粉270842688180 hari yang lalu358

membalas semua(1)saya akan balas

  • P粉904191507

    P粉9041915072024-04-04 13:18:23

    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.

    balas
    0
  • Batalbalas