2013-08-27 1 views
2

모두에게 좋은 오후,"IN"명령을 사용하여 SQL 쿼리에 사용할 매개 변수로 배열을 전달하는 중

SQL 쿼리 관련 질문이 있습니다. "IN"명령을 사용하여 쿼리에 대한 매개 변수로 배열을 사용할 수 있습니까? 예

INT (X) = {2,3,4,5}

UPDATE 'TABLE_NAME'설정 '필드'= 데이터 WHERE FIELD_ID IN (x)는

이유 I에게 이것을 묻는 것은 데이터베이스에서 데이터를 업데이트해야 할 때 반복적 인 SQL 문을 피하는 것입니다. 또한 UPDATE 쿼리에 대해 각 문에 대해 a를 사용하는 것을 고려했지만 100 개 이상의 레코드가 업데이트되는 경우 시스템 속도가 저하 될 경우 쿼리 성능에 영향을 줄지는 알 수 없습니다.

VB.Net btw를 사용하고 있습니다. 내 데이터베이스는 MySQL Workbench입니다.

+0

배열 문자열 (2, 3, 4, 5)에서 생성 UPDATE ... WHERE ID IN {cond} 문자열을 바꾸려면 {cond} 배열 – realnumber3012

+0

에서 문자열을 가져옵니다. 먼저 정수 배열을 문자열로 변환해야합니다. 당신이 의미하는 바는 무엇입니까? – Law

+0

예. MySQL은 배열 매개 변수와 테이블 매개 변수를 지원하지 않습니다. – realnumber3012

답변

0

나는 대답을 얻었다. 각 요소를 String으로 변환 한 다음 각 요소의 ","로 연결하면됩니다. 그래서 전달할 매개 변수는 문자열입니다.

답변 : INT X = {2,3,4,5} 이 될 것입니다 문자열 X = "2,3,4,5"

"UPDATE TABLENAME의 SET 필드 될 것입니다 내 쿼리 문자열 = 값 WHERE ID IN ("&x &") "

도움을 주신 모든 분들께 감사드립니다.

0

내가 MySQL을 잘 알고 아니지만, MSSQL을 다룰 때 내가 테이블로 연결된 정수 값을 분할 사용할 수 있도록, 나는 일반적으로 VB 측에서, DB에서 분할 기능을 가지고, 뭔가 같은 :

 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는 연결된 정수 varchar를 주어진 구분 기호로 정수 ID로 분할하는 db 함수입니다.

일반 SQL 대신 SQL 매개 변수를 사용하는 것이 중요합니다.

참고 : 샘플은 테스트되지 않는 이상 당신은 변수 (하지 저장 프로 시저)에서 쿼리가 있고 ID의 거대한 양의가없는 경우 ...

+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 
관련 문제