これを行うにはいくつかの方法があります:
<オール> <リ>この記事で指摘されている動的 SQL:http://asheej.blogspot.com/2012/04/how-to-use-ms-sql-in-clause-with.html
<リ>各項目を変数で指定します (項目がたくさんある場合、これは非常に見苦しくなります):
@var1 varchar(20)、@var2 varchar(20)、@var3 varchar(20)
<リ>文字列をテーブル変数に変換する分割関数を記述します。それらの多くは世の中にあります。これは私の個人的なお気に入りです:http://dataeducation.com/faster -more-scalable-sqlclr-string-splitting/
<リ>テーブル値パラメーターを使用する (2008):http://www.techrepublic.com/blog/datacenter/passing-table-valued-parameters-in-sql-server-2008/168
<リ>CHARINDEX を使用したちょっとしたトリックを次に示します (このアプローチは Sargable ではないことに注意してください):
あなたの文字列は次のようになります:'abc,def'
CHARINDEX
の使用 、検索文字列と検索文字列内で見つけたい値の両方を区切り文字で埋めます。したがって、私の小さな例を使用すると、文字列は ',abc,def,' になります。先頭と末尾に余分なコンマがあることに注意してください。次に、フィールド データに対して同じことを行います。データにコンマがある場合は、区切り文字を char(2) やセミコロンなどの別のものに交換する必要があります。
次に、検索を実行します:
WHERE CHARINDEX ( ',' + expressionToFind + ',' , ',' + expressionToSearch ',') > 0
区切り文字のパディングにより、検索で "abcabc" が検出されなくなりますが、完全一致の "abc" が検出されます。
2005 を使用している場合は、動的 SQL の使用を避けることができるように、非常に高速な分割関数を取得します。