Je souhaite mettre à jour les 100 meilleurs enregistrements dans SQL Server. J'ai une table T1
avec des champs F1
et F2
. T1
a 200 enregistrements. Je souhaite mettre à jour le F1
champ dans les 100 premiers enregistrements. Comment puis-je mettre à jour en fonction de TOP 100
dans SQL Server?
sql
sql-server
tsql
sql-update
Rajesh
la source
la source
order by
aussi?Sans un
ORDER BY
tout, l'idée deTOP
n'a pas beaucoup de sens. Vous devez avoir une définition cohérente de la direction «vers le haut» et de la direction «vers le bas» pour que le concept de sommet soit significatif.Néanmoins, SQL Server le permet mais ne garantit pas un résultat déterministe .
La
UPDATE TOP
syntaxe dans la réponse acceptée ne prend pas en charge uneORDER BY
clause mais il est possible d'obtenir ici une sémantique déterministe en utilisant un CTE ou une table dérivée pour définir l'ordre de tri souhaité comme ci-dessous.la source
TOP
cotes, vous devriez l'utiliser avecORDER BY
parce que ce qui vous intéresse est comme le "plus" ou "le moins" de quelque chose. Dans d'autres cas, cependant, il se peut que vous ne souhaitiez obtenir qu'un seul enregistrement correspondant. Comme moi aujourd'hui! J'avais besoin de résoudre les problèmes de données (cycles) un à la fois. L'ensemble du processus de correction impliquait un script db, une intervention de l'utilisateur et certaines opérations d'application. Peu nous importait quel enregistrement a été traité en premier. Nous voulions juste que nous les manipulions un à la fois.WHERE
clause pour exclure les enregistrements précédemment traités. La question telle que la réponse écrite et acceptée n'a pas de sens. BTW: Pour utiliser des tables comme file d'attente, c'est un lien très utilewhere
clause pour éviter de traiter les mêmes lignes encore et encore.pour ceux comme moi toujours bloqués avec SQL Server 2000,
SET ROWCOUNT {number};
peut être utilisé avant laUPDATE
requêtelimitera la mise à jour à 100 lignes
Il est obsolète au moins depuis SQL 2005, mais depuis SQL 2017, il fonctionne toujours. https://docs.microsoft.com/en-us/sql/t-sql/statements/set-rowcount-transact-sql?view=sql-server-2017
la source
la source
Ce qui est encore plus cool, c'est le fait que vous pouvez utiliser une fonction de valeur de table en ligne pour sélectionner la (et le nombre via
TOP
) ligne (s) à mettre à jour. C'est:Pour la fonction table, vous avez quelque chose d'intéressant pour sélectionner la ligne à mettre à jour comme:
... et il y a (à mon humble avis) le vrai pouvoir de ne mettre à jour que les premières lignes sélectionnées de manière déterministe tout en simplifiant la syntaxe de l'
UPDATE
instruction.la source
Essayer:
la source
Vous pouvez également mettre à jour à partir de select en utilisant un alias et rejoindre:
la source