0

我的 asp.net 页面中有带有复选框的下拉列表。在该页面中,我将检查多个/单个/所有值。

现在我想将下拉列表中的所有选定值作为参数传递给 sql server 2005 存储过程。

我想将选定值的数组作为字符串传递,每个数组项用“,”分隔

在存储过程中,我想一一检索每个值。(使用拆分功能或任何更好的选择?)

我想处理每个选定参数的插入查询。

请提供任何帮助。

我试过这个存储过程。

CREATE PROCEDURE [dbo].[TEST_LIST] 
@ID_LIST VARCHAR(200)

AS
DECLARE @pos int、@nextpos int、@valuelen int

选择@pos = 0,@nextpos = 1

WHILE @nextpos > 0 BEGIN SELECT @nextpos = charindex(',', @ID_LIST, @pos + 1) SELECT @valuelen = CASE WHEN @nextpos > 0 THEN @nextpos ELSE len(@ID_LIST) + 1 END - @pos - 1

  INSERT INTO TABLE 
    (ID)
     VALUES (convert(int, substring(@ID_LIST, @pos + 1, @valuelen)))
  SELECT @pos = @nextpos

结束返回结束

但这是正确的吗?

我出错了。

请注意这一点>我要一一检索参数,并且每次我都有插入查询。

4

2 回答 2

0

您可以使用 c# 连接字符串(这也称为“计数表”),然后在 sql 中拆分它们。

一篇关于如何拆分“统计表”的好文章:http ://www.sqlservercentral.com/articles/T-SQL/62867/

于 2012-10-12T12:04:37.690 回答
0

作为我的问题的答案,您请更改您的存储过程,如下所示。

CREATE  PROCEDURE SplitList
@List varchar(500) --list like 1,12,13 or john,12,bobe

开始

DECLARE @value varchar(10), @Pos int

SET @List = LTRIM(RTRIM(@List))+ ','
SET @Pos = CHARINDEX(',', @List, 1)

IF REPLACE(@List, ',', '') <> ''
BEGIN
    WHILE @Pos > 0
    BEGIN
        SET @value = LTRIM(RTRIM(LEFT(@List, @Pos - 1)))
        IF @value <> ''
        BEGIN
            -- put your code here 
        END
        SET @List = RIGHT(@List, LEN(@List) - @Pos)
        SET @Pos = CHARINDEX(',', @List, 1)

    END
END         

结尾

谢谢大家。

于 2012-10-15T11:11:43.053 回答