6
votes

Déménager des rangées 'dans une base de données SQL

Dans le tableau, je veux pouvoir "déplacer" des rangées. J'ai une colonne appelée sortid , qui sur l'insertion automatique est une valeur supérieure supérieure à la valeur la plus élevée (facilement trouvée en sélectionnant la valeur supérieure lors du tri de mon sortid desc).

Mais je suis un peu confus sur quelle requête j'utiliserais pour les actions 'Up / Down' pour chaque ligne sur ma page ASP.NET. Quelle requête utiliserais-je pour sélectionner les lignes immédiatement "ci-dessous" ou "ci-dessus" la ligne à déplacer?

sql

0 commentaires

3 Réponses :


3
votes

Une option consiste à incrémenter tous les champs sortides des lignes "ci-dessous" juste avant insérer ing dans la nouvelle ligne. Vous pouvez le faire avec une commande update immédiatement suivie d'une commande insert . Disons que vous insérez une ligne à la position 10. Ensuite, vous pouvez faire quelque chose comme ceci: xxx

Vous devez probablement envelopper cela dans un transaction Pour s'assurer que l'opération est effectuée atomique .

comme pour les actions haut / bas, vous ne voudriez pas faire un insérer . Ce qui précède n'est approprié que pour ajouter nouvelles lignes à un "emplacement" particulier. Pour l'action UP / DOWN, vous pouvez simplement "échanger" la valeur de tri des deux lignes, comme @ Guffa a suggéré dans l'autre réponse .


0 commentaires

1
votes

Pour obtenir les lignes au-dessus de la ligne cible.

select * from [TableName]
where sortid > (select sortid from [TableName]
                where id = @id)


0 commentaires

11
votes

Déplacement d'un enregistrement vers le haut ou le bas est effectué en l'échangeant avec l'enregistrement avant ou après, respectivement, respectivement.

Si les valeurs (code> sont toujours continues (c.-à-d. Vous ne suppriment pas les enregistrements qui seraient Cause un écart), alors vous pouvez simplement ajouter ou soustraire un pour obtenir l'enregistrement suivant ou précédent. Si les enregistrements ne sont pas garantis pour être continu, vous devez trouver l'enregistrement à côté de celui que vous souhaitez déplacer.

pour trouver le tri de l'enregistrement avant: xxx

pour rechercher le suivi de l'enregistrement après: xxx

pour échanger les deux Enregistrements, vous pouvez utiliser cette astuce qui calcule une valeur de l'autre: xxx


1 commentaires

Astuce tifty dans une mise à jour élégante.