Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Menghantar Nilai Terhad Koma kepada Fungsi IN SQL Server Tanpa SQL Dinamik?
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!