Sql 从下拉列表项值向存储过程传递多个值

Sql 从下拉列表项值向存储过程传递多个值,sql,visual-studio,gridview,parameter-passing,Sql,Visual Studio,Gridview,Parameter Passing,我的表中有一列包含值S、a、p和N 我有一个由下拉列表更新的网格 网格附加到存储过程 从下拉列表中,我有以下选项,我希望将适当的值传递给存储过程 森-哪个应该通过S、A和P 非SEN-只应通过N 如何为SEN传递多个值,以便将结果向下过滤到任何S、A或p记录?”N'可以作为listitem值传递,但我不确定在SEN的情况下如何传递所有3个值。可以使用下拉列表项的value属性来实现吗?您可以将逗号分隔的值传递给存储过程 有两种方法可以在存储过程中处理这个逗号分隔的列表 使用动态sql和在运算

我的表中有一列包含值S、a、p和N

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

网格附加到存储过程

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

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

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

您可以将逗号分隔的值传递给存储过程

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

  • 使用动态sql和在运算符中使用相对简单的方法

  • 另一种方法是将字符串拆分为表并在子句中使用

  • 下面是第二种类型的示例

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

    创建函数[dbo].[Splitter](@CommaSperatedString varchar(max))
    返回@Tbl_值表(indValues varchar(500))作为

    开始 如果(@CommaSperatedString!='') 开始 设置@CommaSperatedString=@CommaSperatedString+,' --保持搜索位置的索引 声明@Pos1 Int 声明@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
    
    --从第一个字符开始
    设置为@Pos1=1
    设置为@Pos2=1
    
    而@Pos1则对此表示感谢。最后,我通过在存储过程的WHERE子句中使用case语句解决了这个问题。然而,您的两个建议也是使用SQL解决的,它为我指明了正确的方向。