使用“IN”命令将数组作为参数传递给SQL查询

时间:2013-08-27 07:44:20

标签: mysql sql vb.net sql-in

大家下午好,

我对SQL查询有疑问。是否可以使用“IN”命令将数组用作查询的参数?

例如,

int x = {2,3,4,5}

UPDATE'table_name'set'field'= data WHERE field_ID IN(x)

我要问的原因是当我必须更新数据库中的数据时,避免使用迭代SQL语句。 我还想过为UPDATE Query中的每个语句使用一个但是我不知道它是否会影响查询的性能,如果更新了100多条记录会降低系统的速度。

我正在使用VB.Net btw。 我的数据库是MySQL Workbench。

3 个答案:

答案 0 :(得分:1)

如果您在变量(不是存储过程)中查询并且没有大量的ID,则可以构建自己的IN。我还没有测试过这种方法的速度。

这段代码不会编译,只是为了给你一个想法。

query = "SELECT * FROM table WHERE col IN ("

For t = 0 TO x.Length-1
    If t > 0 Then query &= ","

    query &= "@var" & t
Next

query &= ")"

...

For t = 0 TO x.Length-1
    cmd.Parameters.Add("@var" & t, SqlDbType.Int).Value = x(t)
Next

答案 1 :(得分:0)

我不熟悉mySQL,但在处理MSSQL时,我通常在DB中有一个split函数,这样我就可以用它来将连接的整数值拆分为一个表,在VB端,如下所示:

        Dim myIds = {1, 2, 3, 4}
        Dim sql = <sql>                          
                    SELECT m.* FROM dbo.tblMyData m
                    INNER JOIN dbo.fncSplitIntegerValues(@Ids, ',') t ON t.id = m.Id
                  </sql>.Value

        Using con As New SqlConnection("My connection string..."),
            cmd As New SqlCommand(sql, con)

            cmd.Parameters.Add("@Ids", SqlDbType.VarChar).Value =
                myIds.Select(Function(m) m.ToString).Aggregate(Function(m, n) m & "," & n)

            con.Open()

            Dim rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection)
            While rdr.Read()
                Console.WriteLine(rdr.GetValue(0))
                ' do something else...
            End While

        End Using

dbo.fncSplitIntegerValues是一个db函数,用于将连接的整数varchar拆分为具有给定分隔符的整数Id。

重要的是不要使用普通的sql,而是使用sql参数。

注意:以上样本未经过测试......

答案 2 :(得分:0)

我已经得到了答案。我只需要将每个元素转换为String,然后将其与每个元素的“,”连接起来。所以我将传递的参数将是一个字符串。

解答: int x = {2,3,4,5} 会变成 string x =“2,3,4,5”

我的查询字符串将变为“UPDATE tablename SET field = value WHERE ID IN(”&amp; x&amp;“)”

感谢所有帮助过的人。