2013-08-27 2 views
2

Добрый день Всем,передачи массива в качестве параметра для использования в SQL Query с помощью «IN» Command

У меня есть вопрос, касающийся на SQL запросов. возможно ли использовать массив в качестве параметра для запроса с помощью команды «IN»?

, например,

INT х = {2,3,4,5}

ОБНОВЛЕНИЕ 'table_name' установить 'поле' = FIELD_ID данных, где В (х)

причина I я прошу об этом, чтобы избежать итеративного заявления SQL, когда я должен обновлять данные в базе данных. Я также подумал о том, чтобы использовать для каждого утверждения для запроса UPDATE, но я не знаю, повлияет ли это на производительность запроса, если он замедлит работу системы, если будет обновлено более 100 записей.

Я использую VB.Net кстати. Моя база данных - это Workbench MySQL.

+0

генерировать из строки массива (2, 3, 4, 5) UPDATE ... WHERE ID IN {cond} REPLACE string {cond} в строке получить из массива – realnumber3012

+0

, поэтому мне нужно преобразовать сначала мой массив Integer в строку что вы подразумеваете ,? – Law

+0

Да. Mysql не поддерживает параметры массива и параметры таблицы. – realnumber3012

ответ

0

Я получил ответ. Мне просто нужно преобразовать каждый элемент в String, а затем конкатенировать его с помощью «,» для каждого элемента. поэтому параметр, который я пройду, будет строкой.

ОТВЕТ: ИНТ х = {2,3,4,5} будет строка х = "2,3,4,5"

Моя строка запроса UPDATE поле имя_таблицы SET будет»= ЦЕЛЬ ИДЕНТИФИКАЦИИ («& x &») «

Спасибо всем, кто помог.

0

я не знаком с MySql, но при работе с MSSQL, я обычно имеют раздвоение функцию в БД, так что я могу использовать его для разделения сцепленных целочисленных значений в виде таблицы, в стороне 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 на целочисленный идентификатор с заданным разделителем.

Важно не использовать простой sql, а вместо этого использовать параметры sql.

Примечание: Приведенный выше пример не тестируется ...

+0

моей идеей было бы преобразовать элементы в строку, чтобы она была передана запросу. Спасибо за помощь. – Law

1

Если у вас есть запрос в переменной (не хранимой процедуры), и вы не имеете огромное количество идентификаторов, вы можете построили свой собственный 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