IN fasal dan mengisytiharkan pembolehubah dalam SQL Server: Mengelakkan ralat penukaran jenis
Dalam sesetengah kes, anda mungkin perlu memasukkan berbilang nilai dalam klausa IN yang diwakili oleh pembolehubah yang diisytiharkan. Teknik ini membolehkan nilai ini diurus secara berpusat dalam prosedur tersimpan yang kompleks, menghapuskan keperluan untuk kemas kini berulang. Walau bagaimanapun, terdapat beberapa cabaran semasa melaksanakan pertanyaan sedemikian.
Soalan:
Coretan kod berikut menunjukkan contoh masalah ini:
<code class="language-sql">DECLARE @ExcludedList VARCHAR(MAX) SET @ExcludedList = '3,4,22' SELECT * FROM A WHERE Id NOT IN (@ExcludedList)</code>
Ralat: Penukaran gagal semasa menukar nilai varchar kepada taip int.
Sebab ralat:
Ralat ini berlaku kerana pertanyaan cuba membandingkan lajur integer (Id) dengan pembolehubah rentetan (@ExcludedList) yang mengandungi nilai dipisahkan koma. Klausa IN menjangkakan integer sebagai input, manakala pembolehubah yang diisytiharkan mengandungi rentetan.
Penyelesaian:
Untuk mengatasi cabaran ini, pertimbangkan untuk menggunakan pembolehubah jadual dan bukannya mengisytiharkan pembolehubah. Pembolehubah jadual boleh menyimpan berbilang nilai secara dinamik dalam format jadual, menjadikannya lebih mudah untuk menggunakannya dalam klausa IN.
<code class="language-sql">DECLARE @your_list TABLE (list INT) INSERT into @your_list (list) VALUES (3),(4),(22) SELECT * FROM A WHERE Id NOT IN (select list from @your_list)</code>
Dengan menggunakan pembolehubah jadual, pertanyaan kini membandingkan integer dengan integer dengan tepat, menyelesaikan ralat penukaran.
Pendekatan ini memberikan fleksibiliti dan kecekapan yang lebih besar apabila mengendalikan berbilang nilai dalam klausa IN. Ia membolehkan senarai diisi secara dinamik dan memusatkan pengurusan nilai ini di satu lokasi, menjadikannya lebih mudah untuk mengemas kini atau mengubah suai senarai mengikut keperluan.
Atas ialah kandungan terperinci SQL Server IN Klausa dengan Pembolehubah: Bagaimana untuk Mengelakkan Ralat Penukaran?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!