我知道我可以像这样更新一条记录-但是如何获取已更新记录的ID?(我正在使用MSSQL,所以不能使用Oracle的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)来减轻原始代码显示的性能问题。