1

Actuellement, j'ai une base de données où les PK sont int IDENTITY. Récemment, au cours de la dernière année, j'ai été chargé de les ajouter à une topologie de réplication. Cela a fonctionné assez bien à l'exception des champs IDENTITY.Remplacement des PK dans les tables DB SQL existantes

Je veux explorer mes options pour les changer ou les remplacer par un uniqeidentifier (GUID).
Est-il possible d'insérer une nouvelle colonne PK?
Serais-je mieux de simplement l'augmenter à big int?

Autre chose que je devrais considérer?


Pour expliquer pourquoi je veux faire faire:

Je crois comprendre que lorsque la réplication rencontre une colonne d'identité, il met de côté une gamme identité, par exemple 1-1000 (par défaut), pour chaque abonné pour assurer un INT unique pour cette colonne. Plus vous avez d'abonnés, plus le problème peut être grand. Cela conduit à des erreurs de contrainte de vérification de plage d'identité que nous continuons d'obtenir.

Merci

+0

Vous ne pouvez pas ajouter une nouvelle colonne GUID à utiliser dans la réplication? Il suffit d'ajouter - pas de remplacer - peut-être plus facile (si c'est faisable) –

+0

Cela DOIT être fait afin d'utiliser la réplication et est fait. Le problème que j'essaie de résoudre est lié aux «contraintes de vérification de la plage d'identité», qui sont une corrélation directe avec la façon dont la réplication traite les champs d'identité. –

+0

Donc dans ce cas, j'ajouterais * un nouveau champ GUID, et en ferais le PK - mais un PK NON CLUSTER - et laisserais l'ID INTENTION en place comme clé de clustering sur la table. Votre performance pourrait en souffrir de manière significative ... –

Répondre

1

Si vous devez vraiment supprimer la colonne INT IDENTITY, alors vous auriez à faire ces étapes (plus ou moins):

  • créer la nouvelle colonne GUID dans votre table et le remplir avec des valeurs
  • identifier toutes les relations clés étrangères faisant référence à cette table et de faire une note de ceux (par exemple stocker leurs scripts sur le disque CREER ou quelque chose)
  • ajouter un nouveau champ de référence GUID à tous les tableaux faisant référence
  • remplir ces valeurs en fonction du champ de référence INT vous avez déjà
  • drop toutes les références FK à votre table
  • laisser tomber l'INT IDENTITY PK sur votre table
  • faire la nouvelle colonne GUID votre PK
  • supprimer les anciennes colonnes de référence INT de toutes les tables faisant référence
  • recréez toutes les références clés étrangères en utilisant la nouvelle colonne de référence GUID

J'espère que s devrait faire l'affaire.