Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Menyalurkan Nilai Terhad Koma dengan Cekap kepada Pelayan SQL IN Fungsi?

Bagaimana untuk Menyalurkan Nilai Terhad Koma dengan Cekap kepada Pelayan SQL IN Fungsi?

Mary-Kate Olsen
Mary-Kate Olsenasal
2025-01-22 04:25:09584semak imbas

How to Efficiently Pass Comma-Delimited Values to a SQL Server IN Function?

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!

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