La réorganisation de l'Identité de la clé primaire dans sql server
Oui, je suis très bien conscient des conséquences. Mais j'ai juste envie de les réorganiser. Commencer à partir de 1 jusqu'à la fin.
Comment puis-je aller sur la réorganisation des touches à l'aide d'une seule requête ?
Il est clustered index de clé primaire
Réorganisation comme
First record Id 1
second record Id 2
La clé primaire est de type Int
- Réorganiser dans quel sens?
- est-ce que l'index cluster ?
- c'est l'index cluster. la réorganisation de commencer à partir de 1 au nombre d'enregistrements
- Voulez-vous faire cela parce que vous êtes des valeurs manquantes? est le nouvel ordre va être dans le même ordre que vous avez maintenant? Si pas, vous pouvez, mais vous avez besoin d'une autre colonne pour définir l'ordre - comme un timestamp ou quelque chose d'autre.
- Oui c'est possible, je suppose. Créer une autre colonne et de les définir comme numéro de ligne ? et puis la mise à jour de clé primaire à l'égalité de qui ?
- Ouais, c'est un moyen parfaitement valide. Dans SQL Server, vous "pourrait" être confrontés à des problèmes avec "mise à jour de clé primaire". Je ne me souviens pas si l'IDENTITÉ INSÉRER SUR la volonté d'aider. Toutefois, vous pouvez créer une table intermédiaire insérer toutes les lignes dans la, de chute de la table d'origine et renommer mise en scène de la table d'origine. Cela permettrait également de conserver l'original de l'ordre des colonnes.
- oui semble être la meilleure solution de la création de la nouvelle table temporaire , de l'insertion réelle de la table, et ensuite à la suppression réelle de la table, l'insertion de la table temporaire dans que et de supprimer de la table temporaire. il y a aucune requête qui crée une table temporaire ?
- mon seul de gauche problème est "une colonne de la liste de" j'ai fait une table temporaire de données insérée il y a des données supprimées au vrai serveur, mais quand je viens pour insérer des données de serveur réel qu'elle veut
- Vous devez spécifier les noms de colonne à la fois l'INSERTION et les clauses SELECT. J'ai mis à jour ma réponse à démontrer.
- oui remarqué que. je me demandais serait-il possible sans que. semble que ce n'est pas possible avec une seule requête. besoin d'un autre programme.
Vous devez vous connecter pour publier un commentaire.
IDENTITY
les colonnes ne sont pas mis à jour indépendamment deSET IDENTITY_INSERT
options.Vous pouvez créer une ombre de la table avec la même définition que l'original, sauf pour les
IDENTITY
de la propriété. Passer en que (c'est un des métadonnées seul changement avec aucun mouvement de lignes qui modifie juste le tableau de définition), puis mettre à jour les lignes et revenir bien.Plein travaillé par exemple en passant d'une situation avec des lacunes ou pas de lacunes est indiqué ci-dessous (erreur de manipulation et les transactions sont omis ci-dessous par souci de concision).
Démo Scénario
Supprimer Les Lacunes
Je ne pense pas qu'il y est de toute façon de le faire en une seule requête. Votre meilleur pari est de copier les données dans une nouvelle table, de supprimer et recréer la table d'origine (ou de supprimer les données et réamorcer l'identité) et réinsérez les données dans l'ordre d'origine à l'aide de l'identité précédente comme la commande (mais pas de ré-insertion).
ALTER TABLE ... SWITCH
ne touche pas les pages de données.Ici la colonne Id est exclu de la liste des colonnes.
Ou, vous pouvez faire:
Veuillez la recherche de l'utilisation de sp_rename comme je le fais à partir de la mémoire.
Espère que cette aide.
EDIT: Veuillez enregistrer un script avec tous vos index et contraintes si tout sur la table Table1.
EDIT2: Ajout d'une deuxième méthode de création de la table et de l'insertion dans la table.