将List / Array传递给存储过程并在存储过程中逐个检索参数。

时间:2012-10-12 11:13:26

标签: c# asp.net sql-server-2005 stored-procedures

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

现在我想将所有选定的值从dropdownlist传递给sql server 2005存储过程作为参数。

我希望将所选值的数组作为字符串传递,每个数组项用','

分隔

在存储过程中,我想逐个检索每个值。 (使用拆分功能还是更好的选项?)

我希望对每个选定的参数进行插入查询。

请帮助。

我试过这个存储过程。

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

AS
   DECLARE @pos int,            @nextpos int,            @valuelen int

SELECT @pos = 0,@ nextpos = 1

WHILE @nepospos> 0    开始       SELECT @nepospos = charindex(',',@ ID_LIST,@ post + 1)       SELECT @valuelen = CASE WHEN @nepospos> 0                               然后@nextpos                               ELSE len(@ID_LIST)+ 1                          结束 - @pos - 1

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

END    返回 END

但这是正确的吗?

我觉得错误。

请注意这个>我想逐个检索参数,每次都有插入查询。

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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

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

AS BEGIN

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         

END

感谢所有人。