Je sais que je peux mettre à jour un seul enregistrement comme celui-ci - mais alors comment avoir accès à l'ID de l'enregistrement qui a été mis à jour? (J'utilise MSSQL je ne peux pas utiliser Oracles RowId)Quel est le meilleur moyen de mettre à jour un seul enregistrement via SQL et obtenir l'ID de l'enregistrement qui a été mis à jour? (Java/MSSQL)
update myTable
set myCol = 'foo'
where itemId in (select top 1 itemId from myTable)
Si je Peforming un insert que je pouvais utiliser getGeneratedKeys pour obtenir la valeur du champ id, mais je ne pense pas qu'il y ait un équivalent une mise à jour?
Je sais que je peux utiliser un resultset Défilant pour faire ce que je veux
-à-dire
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();
mais je suis préoccupé par la performance en tant que test montre les délais d'attente de verrouillage sous charge et je me demandais s'il y avait un moyen meilleur/plus simple? Pour terminer ce problème ... Lorsque nous migrerons vers MSSQL2005, nous mettrons à niveau notre code pour utiliser la réponse de Rich. Dans la version actuelle, nous avons utilisé les indications de verrouillage: (UPDLOCK ROWLOCK READPAST) pour atténuer les problèmes de performance que notre code original a montré.
Si vous voulez capturer la valeur dans le script (par exemple, pour le renvoyer au lieu de l'afficher comme résultat), créez une variable de table locale ("declare @output table (itemid int)") et faites "output inserted.itemid dans @output". Vous pouvez ensuite sélectionner à partir de là pour une utilisation ultérieure. – GalacticCowboy
Cet exemple est exactement ce que je cherche ... Je suis actuellement bloqué sur MSSQL 2000 mais le plan de migration pour 2008 est en train de se passer en mars, alors je vais garder ça à l'esprit pour l'instant. Merci – user44538
J'ai du mal à voir pourquoi je suis descendu, un commentaire aiderait –