Я знаю, что могу обновить одну запись, как это - но тогда как мне получить доступ к идентификатору записи, которая была обновлена? (Я использую 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, мы обновим наш код, чтобы использовать ответ Рича.
В текущем выпуске мы использовали подсказки блокировки: (UPDLOCK ROWLOCK READPAST), чтобы уменьшить проблемы с производительностью, которые показал наш оригинальный код.