Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Menghantar Nilai Terhad Koma kepada Fungsi IN SQL Server Tanpa SQL Dinamik?

Bagaimana untuk Menghantar Nilai Terhad Koma kepada Fungsi IN SQL Server Tanpa SQL Dinamik?

Susan Sarandon
Susan Sarandonasal
2025-01-22 03:56:11296semak imbas

How to Pass Comma-Delimited Values to SQL Server's IN Function Without Dynamic SQL?

Mengelakkan SQL Dinamik: Menghantar Nilai Dipisahkan Koma kepada Klausa IN SQL Server

Mengirim rentetan dipisahkan koma secara langsung ke fungsi IN SQL Server selalunya membawa kepada ralat penukaran jenis. Contohnya:

<code class="language-sql">DECLARE @Ids varchar(50);
SET @Ids = '1,2,3,5,4,6,7,98,234';

SELECT * FROM sometable
WHERE tableid IN (@Ids);</code>

Ini akan menghasilkan ralat "Penukaran gagal" kerana klausa IN menjangkakan nilai integer individu, bukan rentetan.

Penyelesaian Bebas SQL Dinamik

Alternatif yang mantap, mengelakkan perangkap SQL dinamik, melibatkan memanfaatkan fungsi CHARINDEX:

<code class="language-sql">DECLARE @Ids varchar(50);
SET @Ids = ',1,2,3,5,4,6,7,98,234,'; -- Note the leading and trailing commas

SELECT * FROM sometable
WHERE CHARINDEX(',' + CAST(tableid AS VARCHAR(8000)) + ',', @Ids) > 0;</code>

Dengan menambahkan koma sebelum dan selepas kedua-dua rentetan input @Ids dan hantaran tableid, kami memastikan setiap nilai individu dikenal pasti dengan betul dalam rentetan yang dipisahkan koma. Fungsi CHARINDEX kemudiannya menyemak dengan cekap kehadiran setiap tableid dalam rentetan @Ids yang diubah suai. Ini secara berkesan meniru gelagat IN klausa tanpa memerlukan SQL dinamik.

Atas ialah kandungan terperinci Bagaimana untuk Menghantar Nilai Terhad Koma kepada Fungsi IN SQL Server Tanpa SQL Dinamik?. 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