是否有一种方法可以获得
的"行影响"结果SELECT * INTO TableB FROM TableA
使用SQL Server的Microsoft的JDBC驱动程序?当我在SQL Server Management Studio中执行该查询时,它将以与删除,插入或更新相同的方式返回行数。
我尝试了executeQuery
,但它不会返回ResultSet
。我尝试了executeUpdate
,但是结果我总是得到-1
,然后尝试了execute
,但是返回值似乎是false
,因此没有ResultSet
。我从2017年3月31日下载了MS JDBC驱动程序6.0,因为我读到了较旧版本的问题。
更新:此问题已在SQL Server的JDBC驱动程序的6.1.5版本中固定。
(上一个答案)
测试证实,即使是最近的Microsoft JDBC驱动程序(6.0.8112.100)
sql = "SELECT * INTO TableB FROM TableA";
try (Statement st = conn.createStatement()) {
int n = st.executeUpdate(sql);
System.out.printf("%d row(s) affected", n);
}
产生
-1 row(s) affected
当JTDS驱动程序正确返回实际行数时:
3 row(s) affected
Microsoft JDBC驱动程序的解决方法是使用匿名代码块返回包含@@ROWCOUNT
sql =
"SET NOCOUNT ON; " +
"SELECT * INTO TableB FROM TableA; " +
"SELECT @@ROWCOUNT AS n; ";
try (
Statement st = conn.createStatement();
ResultSet rs = st.executeQuery(sql)) {
rs.next();
int n = rs.getInt(1);
System.out.printf("%d row(s) affected", n);
}
确实正确返回
3 row(s) affected