Pregunta

Tengo que añadir una clave de auto-inc sustituto para tres tablas en mi almacén de datos:

Nota: Estos no son los nombres de tabla real

  

JakMaster (JakMasterId, Fecha) (PK) Nota: JakMasterId es VARCHAR (60)

     

JakToRoad (JakMasterId, Fecha) (FK)

     

JakToBig (JakMasterId, Fecha) (FK)

¿Qué pasos debo seguir para agregar una clave sustituta a estas tres mesas para que las nuevas claves de referencia entre sí correctamente?

Gracias!

¿Fue útil?

Solución

Estoy asumiendo que usted está deseando para reemplazar JakMasterId con un campo de incremento automático por lo que las otras dos tablas no necesitan un varchar de campo (60) y para mejorar la consulta de veces, pero que le impiden JakMasterId como información.

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

Otros consejos

podría ser capaz de hacer esto en tres pasos dentro de la base de datos para crear el sustituto PK

  1. modificar la tabla para crear la columna de la clave sustituta. Excepto, que tiene que ser anulable.

  2. Escribir un pequeño programa para establecer los valores clave. Es un bucle haciendo actualizaciones.

  3. Alter la mesa para hacer la clave sustituta columna no nulo, incremento automático, indexado, único, etc.

Ahora lo que necesita para crear el FK.

  1. modificar la tabla para agregar la columna de FK. Una vez más, debe ser anulable.

  2. Escribir un pequeño programa para establecer la columna FK. Este es un SELECT (para obtener la fila PK basa en claves no sustitutos), y una actualización de la tabla de referencia.

  3. Si es necesario, modificar la tabla para hacer el FK no nulo. Esto no siempre es necesario, que depende de la definición de la relación de la tabla FK con la tabla de PK.

Repetir la creación FK para todas las demás tablas.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top