SQL de mise à jour top1 ligne de requête
La requête ci-dessous est de travail:
update top(1) ShipBillInfo
set shipfirstname='kkk'
where CustomerId='134';
mais il montre l'erreur si j'essaie de faire une commande d'une pièce d'identité: par exemple:
update top(1) ShipBillInfo
set shipfirstname='kkk'
where CustomerId='134'
order by
OredrGUID desc;
- Plus d'information serait agréable? Table d'info? Les données de l'échantillon?
- Double Possible de Comment mettre à jour et de l'ordre par l'aide de ms sql
Vous devez vous connecter pour publier un commentaire.
TOP
partie de la requête peuvent s'exécuter simultanément à partir de plusieurs clients (et donc ils sont tous les deux d'acquérir la même ligne) avant le supplémentaires/escalade de verrous sont acquis pour lesUPDATE
partie de la requête.ORDER BY
). Cette lecture des autres lignes de produit AVANT la mise à jour, de verrouillage, de sorte que la simultanéité est un problème. Si cette requête est exécutée par deux clients en même temps il n'y aura pas d'effets secondaires nocifs, donc j'ai probablement été d'avertissement inutilement--j'ai simplement vu le potentiel de ce modèle de requête de réutilisation à l'origine des problèmes, et il a noté.pourquoi ne pas vous faire :
Thread-Safe
Pour un thread-safe solution aucune des solutions proposées en ce qui a fonctionné pour moi (certaines lignes s'est mis à jour plus d'une fois lorsqu'il est exécuté en même temps).
Cela a fonctionné:
Si vous voulez retourner à la colonne de l'élément mis à jour vous pouvez mettre ceci dans votre instruction de mise à jour:
OUTPUT INSERTED.AccountId
(entre leSET
etWHERE
)