我是sql的初学者。 我希望从我的表中删除几行(一对一)。我认为最好的方法是使用数组。 我希望传递行(类型为int)的Id来存储数组的过程。我搜索并找到了几种方法。但是还没找到我的闷热。 我感谢任何指导我的人。 :)
答案 0 :(得分:0)
这会对你有所帮助。 :)按照接下来的步骤进行操作
复制粘贴以下代码,它将创建将String转换为Int的函数
创建功能dbo.SplitInts ( @List VARCHAR(MAX), @Delimiter VARCHAR(255) ) 退货表 如 RETURN(SELECT Item = CONVERT(INT,Item)FROM (SELECT Item = x.i.value('(。/ text())[1]','varchar(max)') FROM(SELECT [XML] = CONVERT(XML,'' + REPLACE(@ List,@ Delimiter,' ')+'')。query('。') )作为交叉应用[XML] .nodes('i')AS x(i))AS y 项目不是空的 ); GO
创建以下存储过程
CREATE PROCEDURE dbo.sp_DeleteMultipleId
@List VARCHAR(MAX)
AS
BEGIN
SET NOCOUNT ON;
DELETE FROM TableName WHERE Id IN( SELECT Id = Item FROM dbo.SplitInts(@List, ','));
END
GO
执行此SP使用exec sp_DeleteId '1,2,3,12'
这是您要删除的ID的字符串,
您将数组转换为C#中的字符串并将其作为存储过程参数传递
int [] intarray = {1,2,3,4,5};
string [] result = intarray.Select(x => x.ToString())。ToArray();
SqlCommand command = new SqlCommand();
command.Connection = connection;
command.CommandText = "sp_DeleteMultipleId";
command.CommandType = CommandType.StoredProcedure;
command.Parameters.Add("@Id",SqlDbType.VARCHAR).Value=result ;
这将删除多行,一切都是
答案 1 :(得分:0)
您可以使用XMl数据类型来传递Int Array列表。 将您的ID列表绑定在XML对象中。将其传递给SP。在SP中,从XML参数中获取节点。 你可以参考下面的链接。
答案 2 :(得分:0)
如果你的Id数组从1开始并结束到10你可以在存储过程中使用以下代码
如果你的Id数组从1开始并结束到10你可以在存储过程中使用以下代码
AS
BEGIN
DECLARE @Count NUMERIC(18,0)
SET @Count = 1
WHILE(@Count <= 10 )
BEGIN
DELETE FROM TableName WHERE Id=@Count
SET @Count=@Count+1
END
END
END
答案 3 :(得分:0)
这是我发现有用的链接。它解决了我的问题。 我希望它对你也有帮助:) http://www.codeproject.com/Questions/631284/How-to-pass-an-array-to-SQL-SERVER-stored-pro