SQL Server 2008 WHERE Klausa: Penggunaan Penyata KES yang Betul
Menggunakan pernyataan CASE dalam SQL Server 2008 WHERE klausa menuntut sintaks yang tepat untuk pelaksanaan yang betul. Yang berikut menggambarkan ralat biasa dan penyelesaiannya.
Contoh peletakan pernyataan CASE yang salah dalam klausa WHERE:
<code class="language-sql">WHERE CASE LEN('TestPerson') WHEN 0 THEN co.personentered = co.personentered ELSE co.personentered LIKE '%TestPerson' END AND cc.ccnum = CASE LEN('TestFFNum') WHEN 0 THEN cc.ccnum ELSE 'TestFFNum' END </code>
Masalahnya ialah percubaan untuk menetapkan nilai dalam pernyataan CASE menggunakan =
atau LIKE
. Pernyataan CASE hendaklah digunakan untuk penjanaan nilai bersyarat, bukan penugasan. Pendekatan yang diperbetulkan menggunakan logik Boolean:
<code class="language-sql">WHERE (LEN('TestPerson') = 0 AND co.personentered = co.personentered) OR (LEN('TestPerson') > 0 AND co.personentered LIKE '%TestPerson')</code>
Pertanyaan yang disemak ini menilai keadaan dengan betul berdasarkan panjang 'TestPerson'.
Perbandingan tarikh juga memerlukan pertimbangan yang teliti. Daripada berbilang kenyataan CASE bersarang, menggunakan keadaan ATAU yang berasingan selalunya lebih jelas dan lebih cekap:
<code class="language-sql">WHERE (LEN('2011-01-09 11:56:29.327') = 0 AND co.DTEntered = co.DTEntered) OR (LEN('2011-01-09 11:56:29.327') > 0 AND LEN('2012-01-09 11:56:29.327') = 0 AND co.DTEntered >= '2011-01-09 11:56:29.327') OR (LEN('2011-01-09 11:56:29.327') > 0 AND LEN('2012-01-09 11:56:29.327') > 0 AND co.DTEntered BETWEEN '2011-01-09 11:56:29.327' AND '2012-01-09 11:56:29.327')</code>
Dengan menggunakan sintaks yang diperbetulkan ini, pertanyaan SQL Server 2008 anda yang menggabungkan pernyataan CASE dalam klausa WHERE akan dilaksanakan seperti yang dimaksudkan.
Atas ialah kandungan terperinci Bagaimana untuk Menggunakan Pernyataan CASE dengan betul dalam SQL Server 2008 WHERE Klausa?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!