Sekarang ada opsi ke-4 - parameter bernilai tabel , di mana Anda benar-benar dapat meneruskan tabel nilai ke sproc sebagai parameter dan kemudian menggunakannya seperti biasa Anda menggunakan variabel tabel. Saya lebih suka pendekatan ini daripada XML (atau pendekatan penguraian CSV)
Saya tidak dapat mengutip angka kinerja di antara semua pendekatan yang berbeda, tetapi itulah yang akan saya coba - saya sarankan untuk melakukan beberapa tes kinerja nyata pada pendekatan tersebut.
Sunting:
Sedikit lagi di TVP. Untuk meneruskan nilai ke sproc Anda, Anda cukup mendefinisikan SqlParameter (SqlDbType.Structured) - nilai ini dapat diatur ke sumber IEnumerable, DataTable, atau DbDataReader apa pun. Jadi mungkin, Anda sudah memiliki daftar nilai dalam semacam daftar/array - Anda tidak perlu melakukan apa pun untuk mengubahnya menjadi XML atau CSV.
Saya pikir ini juga membuat sproc lebih jelas, lebih sederhana, dan lebih mudah dirawat, memberikan cara yang lebih alami untuk mencapai hasil akhir. Salah satu poin utama adalah bahwa SQL melakukan yang terbaik pada aktivitas manipulasi berbasis set/tidak perulangan/non string.
Itu tidak berarti itu akan bekerja dengan baik dengan sejumlah besar nilai yang diteruskan. Tetapi dengan set yang lebih kecil (hingga ~1000) itu akan baik-baik saja.