Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Melewati Rentetan Dibatasi Koma ke Fungsi IN SQL Server Tanpa SQL Dinamik?
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!