我的表格中有一列包含值S,A,P和N.
我有一个由下拉列表更新的网格。
网格附加到存储过程。
从下拉列表中我有以下选项,我希望将适当的值传递给存储过程。
如何为SEN传递多个值,以便将结果过滤到任何S,A或P的记录? 'N'可以作为listitem值传递,但我不确定如何在SEN的情况下传递所有3。可以使用下拉列表项的value属性来实现吗?
答案 0 :(得分:1)
您可以将逗号分隔值传递给存储过程。
有两种方法可以在存储过程中处理这个以逗号分隔的列表
使用动态sql并使用In运算符
另一种方法是将字符串拆分为表并使用子句
以下是第二种
的示例我正在创建一个将返回表类型
的函数创建函数[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))
这将解决您的问题。