Mengendalikan klausa IN menggunakan klausa IN mengisytiharkan pembolehubah dalam SQL Server
Memasukkan berbilang nilai ke dalam klausa IN menggunakan pembolehubah yang diisytiharkan mungkin menghadapi ralat, terutamanya jika pembolehubah itu mengandungi aksara bukan angka. Mari kita terokai masalah ini dan bincangkan penyelesaiannya.
Ralat pemahaman
Dalam pernyataan SQL yang diberikan:
<code class="language-sql">DECLARE @ExcludedList VARCHAR(MAX) SET @ExcludedList = 3 + ', ' + 4 + ' ,' + '22' SELECT * FROM A WHERE Id NOT IN (@ExcludedList)</code>
Mesej ralat menunjukkan bahawa penukaran daripada nilai VARCHAR yang mengandungi koma dan ruang kepada integer (INT) gagal. Ini kerana klausa IN menjangkakan julat nilai berangka, dan koma dan ruang tidak diiktiraf sebagai integer yang sah.
Gunakan pembolehubah jadual untuk memproses senarai dinamik
Satu cara untuk mengatasi had ini ialah menggunakan pembolehubah jadual untuk menyimpan senarai nilai untuk klausa IN. Ini membolehkan kami memasukkan berbilang nilai ke dalam pembolehubah jadual dan menganggapnya sebagai satu entiti.
Buat dan isikan pembolehubah jadual
Isytihar pembolehubah jadual untuk mewakili senarai nilai yang dikecualikan:
<code class="language-sql">DECLARE @ExcludedList TABLE (Id INT)</code>
Masukkan nilai ke dalam pembolehubah jadual menggunakan gelung atau mana-mana kaedah lain yang sesuai:
<code class="language-sql">INSERT INTO @ExcludedList VALUES (3) INSERT INTO @ExcludedList VALUES (4) INSERT INTO @ExcludedList VALUES (22)</code>
Gunakan pembolehubah jadual dalam klausa IN
Klausa IN kini boleh merujuk pembolehubah jadual, yang secara automatik akan mengendalikan penukaran nilainya kepada integer:
<code class="language-sql">SELECT * FROM A WHERE Id NOT IN (SELECT Id FROM @ExcludedList)</code>
Pernyataan yang diubah suai ini akan mengembalikan baris daripada jadual A yang tiada dalam senarai kecualikan, sekali gus mengelakkan ralat penukaran.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menggunakan Pembolehubah Diisytiharkan dengan Klausa IN dengan Berkesan dalam SQL Server untuk Mengelakkan Ralat Penukaran?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!