0

我的表中有一个包含值 S、A、P 和 N 的列。

我有一个由下拉列表更新的网格。

网格附加到存储过程。

从下拉列表中,我有以下选项,我想将适当的值传递给存储过程。

  • SEN - 应该通过 S、A 和 P
  • 非 SEN - 应该只通过 N

如何为 SEN 传递多个值,以便将结果过滤到任何 S、A 或 P 记录?'N' 可以作为 listitem 值传递,但我不确定在 SEN 的情况下如何传递所有 3 个值。可以使用下拉列表项的 value 属性来实现吗?

4

1 回答 1

1

好吧,您可以将逗号分隔值传递给存储过程。

在存储过程中有两种方法可以处理这个逗号分隔的列表

  1. 使用动态 sql 和使用 In 运算符的相对简单的方法

  2. 另一种方法是将字符串拆分为表并使用 in 子句

这是第二种类型的示例

我正在创建一个返回表类型的函数

CREATE 函数 [dbo].[Splitter] (@CommaSperatedString varchar(max))
返回 @Tbl_Values 表 (indValues varchar(500)) 为

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 回答