Question

Je dois ajouter une clé de substitution automatique inc trois tables dans mon entrepôt de données:

Note: Ce ne sont pas les noms de table réelle

  

JakMaster (JakMasterId, date) (PK) Remarque: JakMasterId est varchar (60)

     

JakToRoad (JakMasterId, date) (FK)

     

JakToBig (JakMasterId, date) (FK)

Quelles mesures dois-je prendre pour ajouter une clé de substitution à ces trois tables afin que les nouvelles clés mettent en référence correctement?

Merci!

Était-ce utile?

La solution

Je suppose que vous êtes désireux de remplacer JakMasterId avec un champ d'incrémentation automatique de sorte que les deux autres tables ne ont pas besoin varchar (60) terrain et d'améliorer la requête fois, mais que vous souhaitez conserver JakMasterId comme information.

-- set database single-user

-- drop foreign keys

create table NewMaster (ID int identity(1, 1), JakMasterId, Date))
insert NewMaster(JakMasterId, Date) select JakMasterId, Date from JakMaster
drop table JakMaster
sp_rename 'NewMaster', 'JakMaster'

alter table JakToRoad add MasterId int
alter table JakToBig add MasterId int

update JakToRoad set MasterId = JakMaster.ID
from JakToRoad
inner join JakMaster on JakMaster.JakMasterId = JakToRoad.JakMasterId

update JakToBig set MasterId = JakMaster.ID
from JakToBig 
inner join JakMaster on JakMaster.JakMasterId = JakToBig .JakMasterId

alter table JakToRoad drop column JakMasterId
alter table JakToBig drop column JakMasterId


alter table JakToRoad add constraint FK_JTRtoJM foreign key (MasterId) references JakMaster (ID)
alter table JakToBig add constraint FK_JTBtoJM foreign key (MasterId) references JakMaster (ID)

-- reset database to multi-user

Autres conseils

Vous pourriez être en mesure de le faire en trois étapes dans le DB pour créer la mère porteuse PK

  1. Modifiez la table pour créer la colonne de clé de substitution. Sauf, il doit être annulable.

  2. Ecrire un petit programme pour définir les valeurs clés. Il est une boucle modifions.

  3. Alter la table pour faire la non-nulle de la colonne de clé de substitution, l'auto-augmentation, indexé, unique, etc.

Maintenant, vous devez créer le FK de.

  1. Modifiez la table pour ajouter la colonne FK. Encore une fois, il doit être annulable.

  2. Ecrire un petit programme pour définir la colonne FK. Ceci est un SELECT (pour obtenir la ligne PK basé sur des clés non-substitution), et une mise à jour du tableau faisant référence.

  3. Si nécessaire, modifier la table pour rendre le non nul FK. Ce n'est pas toujours nécessaire, cela dépend de la définition de la relation de la table FK avec la table PK.

Répétez la création FK pour toutes les autres tables.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top