C# 将列表/数组传递给存储过程,并在存储过程中逐个检索参数。?
我的asp.net页面中有带复选框的下拉列表。 在该页面中,我将检查多个/单个/所有值 现在,我想将所有选定的值作为参数从dropdownlist传递到SQLServer2005存储过程 我希望将所选值的数组作为字符串传递,每个数组项之间用“,”分隔 在存储过程中,我希望逐个检索每个值。 (使用拆分功能或任何更好的选项?) 我想对每个选定的参数进行insert查询 请帮忙 我已经尝试过这个存储过程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
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