Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Prosedur tersimpan T-SQL yang menerima beberapa nilai Id

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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. bergabung dengan kolom data yang dibatasi koma

  2. Kesalahan SQL Server 206:Bentrokan jenis operan

  3. Batasan kunci asing dapat menyebabkan siklus atau beberapa jalur kaskade?

  4. Cara Memilih Setiap Baris Di Mana Nilai Kolom TIDAK Berbeda

  5. apakah ada keuntungan varchar(500) dibandingkan varchar(8000)?