0

テーブルに値 S、A、P、および N を含む列があります。

ドロップダウン リストによって更新されるグリッドがあります。

グリッドはストアド プロシージャにアタッチされます。

ドロップダウン リストから、適切な値をストアド プロシージャに渡したい次のオプションがあります。

  • SEN - S、A、および P を渡す必要があります
  • 非 SEN - N のみを渡す必要があります

結果が S、A、または P のいずれかのレコードにフィルターされるように、SEN に複数の値を渡すにはどうすればよいですか? listitem の値として 'N' を渡すことができますが、SEN の場合は 3 つすべてを渡す方法がわかりません。ドロップダウン listitem の value プロパティを使用して実現できますか?

4

1 に答える 1

1

コンマ区切りの値をストアド プロシージャに渡すことができます。

ストアド プロシージャでこのコンマ区切りリストを処理する方法は 2 つあります。

  1. 動的SQLを使用してIn演算子を使用する比較的簡単な方法

  2. 別の方法は、文字列をテーブルに分割して in 句で使用することです

これは2番目のタイプの例です

テーブル型を返す関数を作成しています

CREATE Function [dbo].[Splitter] (@CommaSperatedString varchar(max))
戻り値 @Tbl_Values テーブル (indValues varchar(500)) As

Begin IF(@CommaSperatedString != '') Begin Set @CommaSperatedString = @CommaSperatedString + ',' -- 検索位置を保持するインデックス Declare @Pos1 Int Declare @pos2 Int

     -- Start from first character 
     Set @Pos1=1
     Set @Pos2=1

     While @Pos1<Len(@CommaSperatedString)
     Begin
      Set @Pos1 = CharIndex(',',@CommaSperatedString,@Pos1)
      Insert @Tbl_Values Select  Cast(Substring(@CommaSperatedString,@Pos2,@Pos1-@Pos2) As varchar(500))
      -- Go to next non comma character
      Set @Pos2=@Pos1+1
      -- Search from the next charcater
      Set @Pos1 = @Pos1+1
     End 
End

Else Begin @Tbl_Values 値を挿入 (1)
End Return End

そして、これを次のように手順で使用します

select * from Table where values in (select * from Splitter(@CommaList))

これで問題は解決します。

于 2013-05-01T15:20:29.087 に答える