4番目のオプションがあります-
さまざまなアプローチすべての間のパフォーマンスの数値を引用することはできませんが、それは私が試しているものです。実際のパフォーマンステストを行うことをお勧めします。
編集:
TVPについてもう少し。値をsprocに渡すには、SqlParameter(SqlDbType.Structured)を定義するだけです。この値は、任意のIEnumerable、DataTable、またはDbDataReaderソースに設定できます。したがって、おそらく、ある種のリスト/配列に値のリストがすでにあります。XMLまたはCSVに変換するために何もする必要はありません。
これにより、sprocがより明確に、よりシンプルに、より保守しやすくなり、最終結果を達成するためのより自然な方法が提供されると思います。主なポイントの1つは、SQLがセットベース/ループではない/文字列以外の操作アクティビティで最高のパフォーマンスを発揮することです。
渡された値の大きなセットで優れたパフォーマンスを発揮するとは限りません。ただし、小さなセット(最大1000)では問題ないはずです。