Rumah >pangkalan data >tutorial mysql >Bagaimanakah Pembolehubah Jadual Boleh Menyelesaikan Ralat Klausa 'IN' SQL Server dengan Pembolehubah Diisytiharkan?
SQL Server: Menggunakan Pembolehubah Jadual untuk Membetulkan Ralat Klausa "IN" dengan Pembolehubah Diisytiharkan
KlausaSQL Server IN
ialah alat penapisan yang berkuasa. Walau bagaimanapun, menggunakan pembolehubah yang diisytiharkan terus di dalamnya sering membawa kepada ralat: "Penukaran gagal apabila menukar nilai varchar ',' kepada int jenis data." Ini berlaku kerana pembolehubah kerap memegang rentetan yang dipisahkan koma, menyebabkan ketidakpadanan jenis data.
Senario Masalah:
Pertimbangkan coretan kod ini:
<code class="language-sql">DECLARE @ExcludedList VARCHAR(MAX) SET @ExcludedList = '3,4,22' SELECT * FROM A WHERE Id NOT IN (@ExcludedList)</code>
Ralat Terhasil:
<code>Error: Conversion failed when converting the varchar value ',' to data type int.</code>
Penyelesaian: Pembolehubah Jadual
Untuk mengelakkan ralat ini, gunakan pembolehubah jadual untuk menyimpan nilai. Pembolehubah jadual menawarkan beberapa kelebihan:
Mengisi Pembolehubah Jadual Secara Dinamik:
Kod berikut mengisi pembolehubah jadual secara dinamik menggunakan gelung WHILE
untuk memproses nilai yang dipisahkan koma dalam @ExcludedList
:
<code class="language-sql">DECLARE @your_list TABLE (list INT) -- Note: Changed to INT to match Id data type DECLARE @Value VARCHAR(25) DECLARE @Pos INT SET @ExcludedList = '3,4,22' -- Example list SET @Pos = CHARINDEX(',', @ExcludedList) WHILE @Pos > 0 BEGIN SET @Value = SUBSTRING(@ExcludedList, 1, @Pos - 1) INSERT INTO @your_list (list) VALUES (@Value) SET @ExcludedList = SUBSTRING(@ExcludedList, @Pos + 1, LEN(@ExcludedList)) SET @Pos = CHARINDEX(',', @ExcludedList) END IF LEN(@ExcludedList) > 0 BEGIN INSERT INTO @your_list (list) VALUES (@ExcludedList) END SELECT * FROM A WHERE Id NOT IN (SELECT list FROM @your_list)</code>
Cara Penggunaan:
Selepas mengisi pembolehubah jadual, gunakannya dalam klausa IN
:
<code class="language-sql">SELECT * FROM A WHERE Id NOT IN (SELECT list FROM @your_list)</code>
Ini menapis baris dengan cekap berdasarkan kandungan @your_list
. Kaedah ini mengelakkan masalah penukaran jenis data, mendayakan pertanyaan dinamik dengan nombor pembolehubah nilai dipisahkan koma. Ambil perhatian bahawa lajur list
dalam @your_list
hendaklah sepadan dengan jenis data lajur Id
dalam jadual A
.
Atas ialah kandungan terperinci Bagaimanakah Pembolehubah Jadual Boleh Menyelesaikan Ralat Klausa 'IN' SQL Server dengan Pembolehubah Diisytiharkan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!