none
¿Conectar Llave foránea simple a llave primaria compuesta en SQL SERVER 2005?

    Pregunta


  • SQL SERVER 2005

    lo que quiero hacer es lo siguiente :

    en una tabla tener una llave foránea de un solo campo que se conecte a otra tabla donde la llave primaria es compuesta (es decir dos campos) y uno de esos campos es al que me quiero conectar con el foreing key 


    El Error en SQL SERVER 2005 ES EL SIGUIENTE

    No hay claves principales ni candidatas en la tabla a la que se hace referencia ('prestamo') que
    concuerden con la lista de columnas que hace referencia en la clave externa fk_estado_libro

    AQUI LAS DOS TABLAS 

    create table prestamo (
    num_prest int not null,
    cod_libro int not null,
    fecha_prest smalldatetime,
    fechadev_prest smalldatetime,
    id_usuario int not null,

    constraint pk_prestamo_libro primary key(num_prest,cod_libro),

    constraint fk_libro_prestamo foreign key (cod_libro)references libro(cod_libro),
    constraint fk_usuario_prestamo foreign key (id_usuario)references usuario(id_usuario),
    );




    create table estado(
    cod_libro int not null ,
    nom_est_libro varchar(15),
    num_prest int not null ,
    nom_est_prest varchar(15),

    constraint fk_estado_prestamo foreign key (num_prest) references prestamo (num_prest )

    );



    Como ven quiero que en la segunda tabla el campo NUM_PREST se conecte con la tabla PRESTAMO y su campo NUM_PREST pero como la llave primaria es NUM_PREST Y COD_LIBRO 
    no lo permite AYUDA

    quiero hacerlo con codigo transact 

    AGRADEZCO A QUIEN ME PUEDA AYUDAR !!
    jueves, 15 de marzo de 2012 0:28

Respuestas

  • Hola. Con código Transact-SQL te queda algo de este estilo:

    create table prestamo (
     num_prest int not null,
     cod_libro int not null,
     fecha_prest smalldatetime,
     fechadev_prest smalldatetime,
     id_usuario int not null
    );
     
    ALTER TABLE prestamo ADD CONSTRAINT pk_prestamo_libro PRIMARY KEY CLUSTERED (
    num_prest,
    cod_libro
    );

    create table estado(
     cod_libro int not null ,
     nom_est_libro varchar(15),
     num_prest int not null ,
     nom_est_prest varchar(15),
    );

    ALTER TABLE prestamo WITH CHECK ADD CONSTRAINT
    fk_estado_prestamo FOREIGN KEY (num_prest) REFERENCES
    estado (num_prest)

    Prueba y nos cuentas que tal...

    Saludos,


    Guillermo Taylor F.
    IT Pro & Xbox gamer
    My blog

    jueves, 15 de marzo de 2012 1:50

Todas las respuestas

  • Hola. Con código Transact-SQL te queda algo de este estilo:

    create table prestamo (
     num_prest int not null,
     cod_libro int not null,
     fecha_prest smalldatetime,
     fechadev_prest smalldatetime,
     id_usuario int not null
    );
     
    ALTER TABLE prestamo ADD CONSTRAINT pk_prestamo_libro PRIMARY KEY CLUSTERED (
    num_prest,
    cod_libro
    );

    create table estado(
     cod_libro int not null ,
     nom_est_libro varchar(15),
     num_prest int not null ,
     nom_est_prest varchar(15),
    );

    ALTER TABLE prestamo WITH CHECK ADD CONSTRAINT
    fk_estado_prestamo FOREIGN KEY (num_prest) REFERENCES
    estado (num_prest)

    Prueba y nos cuentas que tal...

    Saludos,


    Guillermo Taylor F.
    IT Pro & Xbox gamer
    My blog

    jueves, 15 de marzo de 2012 1:50
  • No Me Ha Funcionado !

    De Todas Maneras , Gracias Por Tu Ayuda !

    miércoles, 04 de abril de 2012 3:18