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
Lepaskan: 2025-01-09 20:37:42
asal
251 orang telah melayarinya

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>
Salin selepas log masuk

Ralat Terhasil:

<code>Error: Conversion failed when converting the varchar value ',' to data type int.</code>
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan