通过Microsoft JDBC驱动程序的选择,由SELECT IN SELECT IN SELECT影响的行计数计数



是否有一种方法可以获得

的"行影响"结果
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

最新更新