Frage

Ich brauche ein Auto-inc Ersatzschlüssel zu drei Tabellen in meinem Data Warehouse hinzuzufügen:

Hinweis: Dies ist nicht die realen Tabellennamen

  

JakMaster (JakMasterId, Datum) (PK) Hinweis: JakMasterId ist varchar (60)

     

JakToRoad (JakMasterId, Datum) (FK)

     

JakToBig (JakMasterId, Datum) (FK)

Was Schritte soll ich einen Ersatzschlüssel zu diesen drei Tabellen hinzuzufügen, damit die neuen Schlüssel aufeinander verweisen korrekt?

Danke!

War es hilfreich?

Lösung

Ich gehe davon aus Sie wollen JakMasterId mit einem Autoinkrement-Feld zu ersetzen, so dass die beiden anderen Tabellen brauchen keine varchar (60) Feld und Abfragezeiten zu verbessern, sondern dass Sie JakMasterId als Information halten.

-- 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

Andere Tipps

Das könnte Sie der Lage sein, dies innerhalb der DB in drei Schritten zu tun, um die Ersatz-PK

erstellen
  1. Ändern Sie die Tabelle, die die Ersatzschlüssel Spalte zu erstellen. Außer, es muss sein, nullable.

  2. ein kleines Programm schreiben die Schlüsselwerte einzustellen. Es ist eine Schleife UPDATEs tun.

  3. ändern Sie die Tabelle, die den Ersatzschlüssel Spalte nicht null, Autoinkrement, indiziert, einzigartig, etc.

  4. machen

Nun müssen Sie den von FK erstellen.

  1. Ändern Sie die Tabelle, die die FK Spalte hinzuzufügen. Auch hier muss es nullable sein.

  2. ein kleines Programm schreiben die FK Spalte einzustellen. Dies ist ein SELECT (die PK Reihe basierend auf nicht-Ersatzschlüssel erhalten), und ein Update auf die verweisende Tabelle.

  3. Falls nötig, ändern Sie die Tabelle, die die FK nicht-null zu machen. Dies ist nicht immer notwendig, es hängt von der Definition der Beziehungen der FK-Tabelle mit der PK-Tabelle.

Wiederholen Sie die FK-Erstellung für alle anderen Tabellen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top