Erland Sommarskog telah mempertahankan jawaban otoritatif untuk pertanyaan ini selama 16 tahun terakhir:Array dan Daftar di SQL Server .
Setidaknya ada selusin cara untuk melewatkan larik atau daftar ke kueri; masing-masing memiliki pro dan kontra yang unik.
- Parameter Bernilai Tabel. Hanya SQL Server 2008 dan yang lebih tinggi, dan mungkin yang paling mendekati pendekatan "terbaik" universal.
- Metode Iteratif. Lewati string yang dibatasi dan putar melaluinya.
- Menggunakan CLR. SQL Server 2005 dan lebih tinggi dari bahasa .NET saja.
- XML. Sangat bagus untuk menyisipkan banyak baris; mungkin berlebihan untuk SELECT.
- Daftar Angka. Performa/kompleksitas lebih tinggi daripada metode iteratif sederhana.
- Elemen dengan panjang tetap. Panjang tetap meningkatkan kecepatan pada string yang dibatasi
- Fungsi Bilangan. Variasi Tabel Bilangan dan panjang tetap di mana angka tersebut dihasilkan dalam suatu fungsi daripada diambil dari tabel.
- Ekspresi Tabel Umum Rekursif (CTE). SQL Server 2005 dan yang lebih tinggi, masih tidak terlalu kompleks dan kinerjanya lebih tinggi daripada metode iteratif.
- SQL Dinamis. Bisa lambat dan memiliki implikasi keamanan.
- Melewati Daftar sebagai Banyak Parameter. Membosankan dan rawan kesalahan, tetapi sederhana.
- Metode yang Sangat Lambat. Metode yang menggunakan charindex, patindex, atau LIKE.
Saya benar-benar tidak dapat merekomendasikan cukup untuk membaca artikel untuk mempelajari tentang pengorbanan di antara semua opsi ini.