第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

是否可以確定哪些行受 SQL Server UPDATE 影響?

是否可以確定哪些行受 SQL Server UPDATE 影響?

達令說 2021-10-27 16:42:16
我正在使用 Java 程序更新 SQL Server 2017 數(shù)據(jù)庫。目前,在測試我的UPDATE語句時,我沒有提交更改 ( connection.setAutoCommit(false))。當(dāng)我打印出受影響的行數(shù)時,計數(shù)遠(yuǎn)低于預(yù)期(UPDATE 語句應(yīng)該更新每一行)。下面是一些示例代碼,演示了我用來發(fā)出UPDATE語句的循環(huán):    // List of users that need to be updated    List<User> updatedUsers = new ArrayList<>();    // Connect to database    Connection connection = null;    connection = DataFiles.getServerConnection();    connection.setAutoCommit(false);    PreparedStatement preparedStatement = null;    int rowsAffected = 0;    final int batchSize = 1000;    int count = 0;    // Create an UPDATE statement for each record to be updated    for (User user : updatedUsers) {        StringBuilder sql = new StringBuilder(                "UPDATE USERS SET\n"        );        sql.append("USER_TYPE=?,\n")                .append("FIRST_NAME=?,\n")                .append("LAST_NAME=?,\n")                .append("EMAIL_ADDRESS=?\n");        sql.append("WHERE USER_ID=?");        // Fill each ?        preparedStatement = connection.prepareStatement(sql.toString());        preparedStatement.setString(1, user.getUserTypeId());        preparedStatement.setString(2, user.getFirstName());        preparedStatement.setString(3, user.getLastName());        preparedStatement.setString(4, user.getEmailAddress());        preparedStatement.setString(5, user.getUserId());        preparedStatement.addBatch();        // Submit in batches of 1000        if (++count % batchSize == 0) {            rowsAffected += IntStream.of(preparedStatement.executeBatch()).sum();            preparedStatement.clearBatch();        }    }    System.out.println(count);    rowsAffected += IntStream.of(preparedStatement.executeBatch()).sum();    preparedStatement.clearBatch();    preparedStatement.close();    System.out.println(rowsAffected + " rows affected!");我的WHERE語句應(yīng)該為循環(huán)的每一次傳遞匹配一條記錄,但我得到的33 rows affected不是我期望的 32,000。有沒有辦法返回受影響的行?我想將匹配項與不匹配的項進行比較。我已經(jīng)嘗試將我的循環(huán)調(diào)整為SELECT具有相同WHERE條件的語句并返回所有 32,000 條記錄,因此我確信這些記錄確實存在。
查看完整描述

1 回答

?
ibeautiful

TA貢獻1993條經(jīng)驗 獲得超6個贊

您正在循環(huán)的每次迭代中創(chuàng)建一個新的 PreparedStatement。您需要在調(diào)用 executeBatch 的同一個 PreparedStatement 對象上排隊執(zhí)行批處理。目前您只執(zhí)行第 1000 個排隊查詢。


StringBuilder sql = new StringBuilder(

    "UPDATE USERS SET\n"

);


sql.append("USER_TYPE=?,\n")

    .append("FIRST_NAME=?,\n")

    .append("LAST_NAME=?,\n")

   .append("EMAIL_ADDRESS=?\n");

sql.append("WHERE USER_ID=?");


preparedStatement = connection.prepareStatement(sql.toString());


for (User user : updatedUsers) {

        preparedStatement.setString(1, user.getUserTypeId());

        preparedStatement.setString(2, user.getFirstName());

        preparedStatement.setString(3, user.getLastName());

        preparedStatement.setString(4, user.getEmailAddress());

        preparedStatement.setString(5, user.getUserId());

        preparedStatement.addBatch();


        // Submit in batches of 1000

        if (++count % batchSize == 0) {

            rowsAffected += IntStream.of(preparedStatement.executeBatch()).sum();

            preparedStatement.clearBatch();

        }

}

為了確定受影響的行(在 sql server 2005+ 中),您可以在 SQL 中使用 OUTPUT 子句讓數(shù)據(jù)庫返回受影響的行數(shù)據(jù)。文章


查看完整回答
反對 回復(fù) 2021-10-27
  • 1 回答
  • 0 關(guān)注
  • 198 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號