【发布时间】:2008-12-09 13:17:21
【问题描述】:
我知道我可以像这样更新单个记录 - 但是如何访问已更新记录的 ID? (我使用的是 MSSQL,所以不能使用 Oracles RowId)
update myTable
set myCol = 'foo'
where itemId in (select top 1 itemId from myTable )
如果我正在执行插入,我可以使用 getGeneratedKeys 来获取 id 字段值,但我认为没有等效的更新?
我知道我可以使用可滚动的结果集来做我想做的事
即
stmt = conn.prepareStatement("select top 1 myCol, itemId from myTable", ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
ResultSet resultSet = stmt.executeQuery();
if(resultSet.first()){
resultSet.updateString(1, "foo");
resultSet.updateRow();
String theItemId = resultSet.getString(1)
}
resultSet.close();
但我担心性能,因为测试显示负载下的锁定超时,我想知道是否有更好/更简单的方法?
-- 编辑: 只是为了解决这个问题... 当我们迁移到 MSSQL2005 时,我们将升级我们的代码以使用 Rich 的答案。 在当前版本中,我们使用了锁提示:(UPDLOCK ROWLOCK READPAST) 来缓解原始代码显示的性能问题。
【问题讨论】:
标签: java sql-server