Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Melewati Rentetan Dibatasi Koma ke Fungsi IN SQL Server Tanpa SQL Dinamik?

Bagaimana untuk Melewati Rentetan Dibatasi Koma ke Fungsi IN SQL Server Tanpa SQL Dinamik?

Linda Hamilton
Linda Hamiltonasal
2025-01-22 04:21:09145semak imbas

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

Mengelakkan SQL Dinamik: Mengendalikan Nilai Dipisahkan Koma dalam Klausa IN SQL Server

Mengirimkan rentetan dipisahkan koma secara langsung ke fungsi IN SQL Server selalunya membawa kepada ralat penukaran taip. Mari kita periksa senario biasa:

<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 mengakibatkan ralat penukaran kerana klausa IN menjangkakan nilai integer individu, bukan rentetan. Untuk memintas ini tanpa menggunakan SQL dinamik, kaedah yang lebih mantap ialah menggunakan fungsi CHARINDEX:

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

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

Pertanyaan yang dipertingkatkan ini menambahkan koma dengan bijak pada kedua-dua hujung rentetan @Ids. CHARINDEX kemudian mencari versi tableid yang dipisahkan koma dalam rentetan @Ids yang diubah suai. Ini memastikan padanan tepat dan menghalang padanan separa yang boleh membawa kepada keputusan yang salah. Hanya baris yang tableid ditemui dalam senarai yang dipisahkan koma akan dikembalikan.

Atas ialah kandungan terperinci Bagaimana untuk Melewati Rentetan Dibatasi Koma ke 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