2010-10-14 8 views
0

J'utilise SQL Server 2005. Je voudrais mettre à jour des champs comme Order BY MatchId commandes comme ci-dessous la requête. Mais les champs mis à jour ne sont pas classés par MatchId.T-SQL Update Statment avec ORDER BY

DECLARE @counter int 

SET @counter = 10008 

UPDATE Matches 
SET @counter = MatchNumberCounter = @counter + 1 
WHERE MatchId IN 
     (SELECT TOP (232) MatchId FROM Matches WHERE LeagueStatueId = 280 AND Week <> 1 
     ORDER BY Week, MatchDate, MatchTime) 

Merci déjà maintenant

+0

Si vous publiez code ou XML, ** S'il vous plaît ** mettre en évidence les lignes dans l'éditeur de texte et cliquez sur le bouton « code » (101 010) sur la barre d'outils de l'éditeur pour mettre en forme bien et la syntaxe mettre en évidence! –

+0

ok. Merci beaucoup. – Kerberos

Répondre

1

Il semble que vous essayez de faire une « mise à jour excentrique ». C'est une technique non documentée et il y a beaucoup de conditions qui doivent être remplies pour que cela fonctionne. These are discussed here (nécessite une inscription gratuite)

Vous devriez être capable de faire quelque chose comme ça.

;With cte As 
(
SELECT TOP (232) MatchId , 
       MatchNumberCounter, 
       ROW_NUMBER() over (order by MatchId) as RN 
FROM Matches 
WHERE LeagueStatueId = 280 AND Week <> 1 
ORDER BY Week, MatchDate, MatchTime 
) 
UPDATE cte SET MatchNumberCounter=RN+10008 
+0

Merci beaucoup, mais les champs mis à jour ne sont pas classés par ordre de select statment where clause. Clairement lors de la sélection avec la valeur ci-dessus de la requête MatchID venant 5,7,1 etc ... je voudrais mettre à jour la valeur de MatchNumberCounter par cet ordre. MatchId = 5 MatchNumberCounter = 10009, MatchId = 7 MatchNumberCounter = 10010, MatchId = 1 MatchNumberCounter = 10011 etc. – Kerberos

+0

Oui. Le RowNumber est ordonné par MatchId et non le 'order' appliqué à la clause' TOP'. –