Mettre à jour le numéro de table temporaire n + 1 d'une autre table

J'ai ce que je pense devrait être une tâche de mise à jour très simple, mais je suis bloqué pour le moment avec le problème suivant. J'ai une table temporaire pour laquelle je voudrais mettre à jour toutes les lignes à une valeur de n + 1 d'une autre table; par exemple:

La personne:

+--------+----+ | Name | N | +--------+----+ | A | 1 | | A | 5 | | A | 2 | | B | 8 | +--------+----+ 

@temp_Person:

 +--------+--------+ | Name | NPlus1 | +--------+--------+ | A | NULL | | B | NULL | +--------+--------+ 

J'ai besoin de mettre à jour @temp_PersonTable pour que les valeurs de la colonne NPlus1 soient dérivées de la colonne N dans la table Person, quelque chose comme:

 UPDATE @temp_table SET NPlus1 = ((SELECT MAX(N) FROM Person WHERE Person="A") + 1) WHERE @temp_table.Person = Person.Name UPDATE @temp_table SET NPlus1 = ((SELECT MAX(N) FROM Person WHERE Person="B") + 1) WHERE @temp_table.Person = Person.Name 

Donc le résultat serait:

 +--------+--------+ | Name | NPlus1 | +--------+--------+ | A | 6 | | B | 9 | +--------+--------+ 

Ai-je besoin d'écrire une instruction UPDATE individuelle pour chaque cas? Je me request comment j'écrirais un script SQL pour parcourir chaque nom DISTINCT en personne et faire la mise à jour, et pense actuellement que cette tâche serait plus facile à faire à partir d'une application séparée pour mettre à jour la table en utilisant une boucle foreach.

Vous avez juste besoin d'get les valeurs dans le cadre d'une sous-requête d'abord, puis JOIN à cela.

 UPDATE tp SET NPlus1 = SQ.max_N + 1 FROM @temp_Person TP INNER JOIN (SELECT Name, MAX(N) AS max_N FROM Person GROUP BY Name) SQ ON SQ.Name = TP.Name 

Vous pouvez utiliser une seule instruction

 update #temp_Person set NPlus1 = (select MAX(N) + 1 from Person where Name = #temp_Person.Name)