我的表中有一个包含值 S、A、P 和 N 的列。
我有一个由下拉列表更新的网格。
网格附加到存储过程。
从下拉列表中,我有以下选项,我想将适当的值传递给存储过程。
- SEN - 应该通过 S、A 和 P
- 非 SEN - 应该只通过 N
如何为 SEN 传递多个值,以便将结果过滤到任何 S、A 或 P 记录?'N' 可以作为 listitem 值传递,但我不确定在 SEN 的情况下如何传递所有 3 个值。可以使用下拉列表项的 value 属性来实现吗?
我的表中有一个包含值 S、A、P 和 N 的列。
我有一个由下拉列表更新的网格。
网格附加到存储过程。
从下拉列表中,我有以下选项,我想将适当的值传递给存储过程。
如何为 SEN 传递多个值,以便将结果过滤到任何 S、A 或 P 记录?'N' 可以作为 listitem 值传递,但我不确定在 SEN 的情况下如何传递所有 3 个值。可以使用下拉列表项的 value 属性来实现吗?
好吧,您可以将逗号分隔值传递给存储过程。
在存储过程中有两种方法可以处理这个逗号分隔的列表
使用动态 sql 和使用 In 运算符的相对简单的方法
另一种方法是将字符串拆分为表并使用 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))
这将解决您的问题。