C# 将列表/数组传递给存储过程,并在存储过程中逐个检索参数。?

C# 将列表/数组传递给存储过程,并在存储过程中逐个检索参数。?,c#,asp.net,sql-server-2005,stored-procedures,C#,Asp.net,Sql Server 2005,Stored Procedures,我的asp.net页面中有带复选框的下拉列表。 在该页面中,我将检查多个/单个/所有值 现在,我想将所有选定的值作为参数从dropdownlist传递到SQLServer2005存储过程 我希望将所选值的数组作为字符串传递,每个数组项之间用“,”分隔 在存储过程中,我希望逐个检索每个值。 (使用拆分功能或任何更好的选项?) 我想对每个选定的参数进行insert查询 请帮忙 我已经尝试过这个存储过程 CREATE PROCEDURE [dbo].[TEST_LIST] @ID_LIST VARC

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

现在,我想将所有选定的值作为参数从dropdownlist传递到SQLServer2005存储过程

我希望将所选值的数组作为字符串传递,每个数组项之间用“,”分隔

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

我想对每个选定的参数进行insert查询

请帮忙

我已经尝试过这个存储过程

CREATE PROCEDURE [dbo].[TEST_LIST] 
@ID_LIST VARCHAR(200)
AS
声明@pos int, @下一站, @瓦莱伦国际酒店

选择@pos=0、@nextpos=1

而@nextpos>0 开始 选择@nextpos=charindex(“,”,@ID_LIST,@pos+1) 当@nextpos>0时,选择@valuelen=CASE 然后@nextpos ELSE len(@ID_LIST)+1 完-@pos-1

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

但这是正确的吗

我犯了个错误


请注意,我希望一个接一个地检索参数,每次都有insert查询。

您可以将字符串(也称为“计数表”)与c#连接起来,然后在sql中拆分它们

一篇关于如何拆分“理货表”的好文章:

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

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

声明@value varchar(10),@Pos int
设置@List=LTRIM(RTRIM(@List))+','
设置@Pos=CHARINDEX(“,”,@List,1)
如果替换(@List,“,”)”
开始
而@Pos>0
开始
设置@value=LTRIM(RTRIM(左(@List,@Pos-1)))
如果@value''
开始
--把你的代码放在这里
结束
设置@List=RIGHT(@List,LEN(@List)-@Pos)
设置@Pos=CHARINDEX(“,”,@List,1)
结束
结束
结束


谢谢大家。

您是否需要C端的帮助来连接这些值?还是SQL端将它们拆分回来?由于在SQL 2005中,此参数或XML参数是您唯一的选项,因此在较新的SQL Server版本中,您也可以使用表值参数(尽管升级SQL Server对于已投入生产的应用程序来说通常不是一个简单的选项),编写了某种形式的
dbo.Split
UDF,它接受一个字符串和一个分隔符,并将其拆分为一个单列表结果。。。我认为这也没什么不同。令人恼火的是,SQL Server缺少内置的“拆分”功能,是的。我已经编辑了我的问题,请再次参考
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