0

私たちのレガシーシステムにはT、複合キー-2列のテーブルがAありB、条件に一致する行を検索する必要がありますA == x AND B == y

(x,y)しかし、のようなtouplesのセットのために{(x1,y1), (x2,y2), (x3,y3)}

X = {x1,x2x3}私がやったらY = {y1,y2,y3}

select A,B,value from T where A in (X) and B in (Y)

結果に行が含まれている可能性がありますx1, y2, valueNが、それは正しくありません

トゥープルの数に上限がないので、Javaコードからパラメーターとして渡す必要があります。

私のサーバーはMSSQL2008です

テーブル値パラメーターが答えになる可能性がありますが、JDBCドライバーではまだサポートされていません

(これが十分に明確であることを願っています)

4

2 に答える 2

0

いくつかの解決策があります:

組み合わせをチェックするステートメントを使用します。

SELECT A, B, value FROM T WHERE A = X1 AND B = Y1 OR A = X2 AND B = Y2

プリペアドステートメントを使用し、各組み合わせを個別にクエリします(注:ここではJava 7 try-with-resourcesを使用します)

try (PreparedStatement pstmt = con.prepareStatement("SELECT A, B, value FROM T WHERE A = X1 AND B = Y1")) {
  for (Tuple tuple : tuples) {
    pstmt.setObject(1, tuple.X);
    pstmt.setObject(2, tuple.Y);
    try (ResultSet rs = pstmt.executeQuery()) {
      while (rs.next()) {
        // process however you like
      }
    }
  }
}
于 2012-09-08T08:44:27.447 に答える
0

使用できるハックの 1 つは、値を文字列に変換して連結することです。

于 2012-09-06T09:44:46.737 に答える