2012-10-12 101 views
0

我有我的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 @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 

END RETURN END

BUT这是正确的??

I GOT ERROR。

请注意this>一个接一个我想检索参数,并在每次我有插入查询。

+0

您是否在C#端寻求帮助来连接值?或者SQL方面把它们分离出来?既然你在SQL 2005中,这个参数或XML参数是你唯一的选择,在较新的SQL Server版本中,你也可以使用Table Valued参数(尽管升级SQL Server对于已经在生产中的应用程序来说通常不是一个简单的选项)。 – dbattaglia

+0

我认识的大多数人在某个点或其他地方写了某种形式的'dbo.Split' UDF,它需要一个字符串和一个分隔符,并将其拆分为单列表结果...我建议这没有什么不同。令人烦恼的是,SQL Server缺少内置的“分割”功能,是的。 –

+0

我编辑了我的问题请再次参考 – Patel

回答

0

AS回答我的问题,你 请更改您的存储过程 如下表所示。

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

感谢所有。

相关问题