Erland Sommarskogは、過去16年間、この質問に対する信頼できる回答を維持してきました。SQLServerの配列とリスト 。
配列またはリストをクエリに渡すには、少なくとも12の方法があります。それぞれに独自の長所と短所があります。
- テーブル値パラメーター。 SQL Server 2008以降のみであり、おそらくユニバーサルな「最良の」アプローチに最も近いものです。
- 反復法。区切られた文字列を渡し、ループします。
- CLRの使用。 SQLServer2005以降は.NET言語のみ。
- XML。多くの行を挿入するのに非常に適しています。 SELECTにはやり過ぎかもしれません。
- 数字の表。単純な反復法よりも高いパフォーマンス/複雑さ。
- 固定長の要素。固定長は、区切られた文字列よりも速度を向上させます
- 数値の関数。数値のテーブルのバリエーションと固定長。数値はテーブルから取得されるのではなく、関数で生成されます。
- 再帰共通テーブル式(CTE)。 SQL Server 2005以降、それでも複雑すぎず、反復法よりも高いパフォーマンス。
- 動的SQL。遅くなる可能性があり、セキュリティに影響があります。
- リストを多くのパラメータとして渡す。面倒でエラーが発生しやすいですが、単純です。
- 本当に遅い方法。 charindex、patindex、またはLIKEを使用するメソッド。
これらすべてのオプション間のトレードオフについて学ぶために記事を読むのに十分なことをお勧めすることはできません。