Hapuskan nilai yang dibataskan ke fungsi SQL Server IN
Mengirim nilai rentetan dipisahkan koma ke fungsi IN dalam SQL Server boleh menjadi satu cabaran. Penggunaan langsung fungsi IN yang mengandungi rentetan terhad akan mengakibatkan ralat penukaran.
Pilihan 1: SQL Dinamik
Salah satu cara ialah menggunakan SQL dinamik, yang membolehkan anda membina klausa IN secara dinamik. Walau bagaimanapun, kaedah ini tidak disyorkan kerana kebimbangan keselamatan dan prestasi.
Pilihan 2: Operasi rentetan
Penyelesaian yang lebih cekap dan selamat ialah memanipulasi rentetan yang dibataskan ke dalam format yang boleh diterima oleh fungsi IN. Satu pilihan ialah menggunakan fungsi CHARINDEX() untuk menyemak sama ada setiap nilai dalam rentetan yang dibataskan sepadan dengan nilai lajur dalam jadual:
<code class="language-sql">DECLARE @Ids varchar(50) = ',1,2,3,5,4,6,7,98,234,' SELECT * FROM sometable WHERE CHARINDEX(','+CAST(tableid AS VARCHAR(8000))+',', @Ids) > 0</code>
Kaedah ini tidak memerlukan SQL dinamik, sekali gus mengimbangi kelebihan keselamatan dan prestasi.
Penyelesaian mudah
Bagi mereka yang mencari penyelesaian yang kurang elegan tetapi lebih mudah, terdapat helah mudah:
<code class="language-sql">DECLARE @Ids varchar(50) = ',1,2,3,5,4,6,7,98,234,' SELECT * FROM sometable WHERE ',' + CONVERT(VARCHAR, tableid) + ',' LIKE '%,' + @Ids + '%';</code>
Walaupun kaedah ini tidak secekap kaedah CHARINDEX(), ia memberikan alternatif yang cepat dan mudah.
Atas ialah kandungan terperinci Bagaimana untuk Menyalurkan Nilai Terhad Koma dengan Cekap kepada Pelayan SQL IN Fungsi?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!