Rumah >pangkalan data >tutorial mysql >Bagaimanakah Pembolehubah Jadual Boleh Menyelesaikan Ralat Klausa 'IN' SQL Server dengan Pembolehubah Diisytiharkan?

Bagaimanakah Pembolehubah Jadual Boleh Menyelesaikan Ralat Klausa 'IN' SQL Server dengan Pembolehubah Diisytiharkan?

Patricia Arquette
Patricia Arquetteasal
2025-01-09 20:37:42254semak imbas

How Can Table Variables Solve SQL Server's

SQL Server: Menggunakan Pembolehubah Jadual untuk Membetulkan Ralat Klausa "IN" dengan Pembolehubah Diisytiharkan

Klausa

SQL 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:

  • Mereka menyimpan data berstruktur.
  • Mereka boleh diisi secara dinamik.
  • Ia berfungsi seperti jadual biasa dalam pertanyaan.

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn