SQL Server : incrément INT colonne à l'aide de la variable
Essayez d'insérer une colonne ordre dans certains dossiers, basé sur un autre champ. Normalement pas un problème de MySQL, mais dans SQL Server, je ne comprends pas très bien la syntaxe ici.
C'est ce que j'ai:
DECLARE @a int
SET @a = 1
UPDATE tablename
SET order_position = @a:=@a+1
WHERE table_id = xxx
Mais une partie de moi pense que c'est de descendre la route d'une fonction/procédure, par opposition à un seul coup UPDATE
requête.
Désolé, mais j'ai écrit cela comme une base de données MySQL personne, pas familiers avec les variables avec SQL Server, de sorte que pourrait être un peu de mal.
J'ai besoin de l'exécuter sur une charge de dossiers un par un, et je veux le order_position colonne à 1-7 (où il y a 7 dossiers), etc..
Merci, Chris
- Ce champ est de l'ordre?
- Eh bien j'ai besoin d'ordonner les résultats avant de me mettre à jour, de sorte qu'ils sont dans le bon ordre. Nous allons l'appeler "fieldsort" pour les fins de cet exercice.
Vous devez vous connecter pour publier un commentaire.
Essayez ce code:
Que vous essayez de faire une double tâche qui est la question.
"order_position = @a:=@a+1"
a 2 interprétations, celle que vous connaissez et l'autre est que le résultat de l'incrémentation une, qu'il a réussi est ce qui devrait aller dans le order_position valeur.Séparer la variable d'incrémentation de la mise à jour du champ.
Venant de MySQL, vous avez peut-être oublié un excellent outil pour cette tâche,
ROW_NUMBER()
.Vous pouvez utiliser
ROW_NUMBER()
pour attribuer un numéro à chaque ligne dans un tableau:PARTITION BY
indique un groupement pour la numérotation, c'est à dire il y aura un '1' pour chaque combinaison de champs utilisés dans l'PARTITION BY
, et ils seront bien sûr être commandés à partir de 1-n, selon laORDER BY
clause.