如何将数组传递给sql?

时间:2014-12-20 07:21:00

标签: sql stored-procedures

我是sql的初学者。 我希望从我的表中删除几行(一对一)。我认为最好的方法是使用数组。 我希望传递行(类型为int)的Id来存储数组的过程。我搜索并找到了几种方法。但是还没找到我的闷热。 我感谢任何指导我的人。 :)

4 个答案:

答案 0 :(得分:0)

这会对你有所帮助。 :)按照接下来的步骤进行操作

  1. 打开查询设计器
  2. 复制粘贴以下代码,它将创建将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

  3. 创建以下存储过程

     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
    
  4. 执行此SP使用exec sp_DeleteId '1,2,3,12'这是您要删除的ID的字符串,

  5. 您将数组转换为C#中的字符串并将其作为存储过程参数传递

  6. 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参数中获取节点。 你可以参考下面的链接。

Passing an array of parameters to a stored procedure

答案 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