-1

以下のパラメータは、(2,3,4,5)または(2)のようになります。あるいは、NULLの場合でも、ServiceEntryPart列に以下のコードセクションのデータを含めることができます。私の質問は、フィルターを使用できるように正しい構文は何になるかということです。フィルタがNULLの場合、私はそれを完全に無視します。これまでのところ、NULL(フィルターを除く)の場合は正常に機能しますが、たとえば(1,2)のパラメーターがある場合は、機能しません。ありがとうございます。

ServiceEntryPart.ServiceTypeIDs 
 4,3
 3
 NULL
 1
 8
 2,5

--Filter:
  @ServiceTypes nvarchar(100) = NULL

--Filter with values SET @ServiceTypes = (1,2,4,5)      

--Where Clause  
WHERE   (ServiceEntryPart.ServiceTypeIDs = ISNULL(@ServiceTypes,ServiceEntryPart.ServiceTypeIDs)   
4

1 に答える 1

1

IN句の変数リストを渡したいようです。1つの方法は動的SQLを使用することですが、それはやり過ぎだと思います。

次のようなことを試すことができます:

where @ServiceTypes is null or
      charindex(','+cast(ServiceEntryPart.ServiceTypeIDs as varchar(255)+',',
                ','+@ServiceTypes+',') > 0

これは、文字列検索を使用してINと同等の処理を実行しています。@ServiceTypesは、スペースを含まないコンマ区切りのリストであると想定しています。カンマを前後に付けます。5のようなものを探すと、実際には「、5」が検索されるため、リストの25または55とは一致しません。

于 2012-07-17T20:06:41.740 に答える