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

时间:2013-04-30 21:50:32

标签: sql visual-studio gridview parameter-passing

我的表格中有一列包含值S,A,P和N.

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

网格附加到存储过程。

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

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

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

1 个答案:

答案 0 :(得分:1)

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

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

  1. 使用动态sql并使用In运算符

  2. 的相对简单的方法
  3. 另一种方法是将字符串拆分为表并使用子句

  4. 以下是第二种

    的示例

    我正在创建一个将返回表类型

    的函数

    创建函数[dbo]。[Splitter](@ CommaSperatedString varchar(max))
    返回@Tbl_Values表(indValues varchar(500))As

    开始 IF(@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
    

    否则     开始         插入@Tbl_Values值(1)
        结束 返回 端

    并在您的程序中使用此

    从表中选择*      其中的值(select * from Splitter(@CommaList))

    这将解决您的问题。