【问题标题】:SQL Server error: the INSERT statement conflicted with the FOREIGN KEY constraintSQL Server 错误:INSERT 语句与 FOREIGN KEY 约束冲突
【发布时间】:2018-05-23 12:27:17
【问题描述】:

我知道这听起来可能很愚蠢,但我对这些表有疑问,我知道它们是错误的,但我不知道如何修复它们。

这是我的代码:

create table Empresarial
(
    paquete varchar(10) not null,
    Alojamiento varchar(10),
    correo varchar(15),
    nlineas int,
    precio decimal(7,2),
    constraint pk_paquete_empresarial primary key(paquete)
);

create table Telefono
(
    paquete varchar(10) not null,
    nllamadas varchar(15),
    precio decimal(7,2),
    constraint pk_paquete_telefono primary key(paquete)
);

create table TVTel
(
    paquete varchar(10) not null,
    nllamadas varchar(15),
    canales varchar(10),
    TVS varchar(10),
    precio decimal(7,2),
    constraint pk_paquete_tvtel primary key(paquete)
);

create table TV
(
    paquete varchar(10) not null,
    canales varchar(10),
    TVS varchar(10),
    precio decimal(7,2),
    constraint pk_paquete_tv primary key(paquete)
);

create table Paquete
(
    IDContrato int not null,
    TipoCon varchar (11) not null,
    paquete varchar(10) not null,
    constraint pk_IDContrato primary key(IDContrato),
    constraint fk_paquete_empresarial foreign key (paquete) references Empresarial(paquete),
    constraint fk_paquete_telefono foreign key (paquete) references Telefono(paquete),
    constraint fk_paquete_tvtel foreign key (paquete) references TVTel(paquete),
    constraint fk_paquete_tv foreign key (paquete) references TV(paquete)
);

这是我的插入:

insert into Empresarial 
values ('EMPPAQ001', 'SI', 'SI', 50, 1499.00);

insert into Telefono 
values ('TELPAQ001', '1000', 249.00);

insert into TV 
values ('TVSPAQ001', '52', 1, 289.00);

insert into TVTel 
values ('TVTPAQ001', '1000', '52', 1, 329.00); 

insert into Paquete 
values (1001, 'Mensual', 'TVTPAQ001'), 
       (1002, 'Mensual', 'TVSPAQ001'),
       (1003, 'Mensual', 'TELPAQ001'),
       (1004, 'Mensual', 'EMPPAQ001');

问题是,我想将 4 个不同表中的 4 个主键引用到另一个表中的一列作为外键。我收到此错误:

INSERT 语句与 FOREIGN KEY 约束“fk_paquete_empresarial”冲突。冲突发生在数据库“telecommsouthtest”、表“dbo.Empresarial”、列“paquete”中。

当我在表Paquete 中进行一些插入时。我该如何解决?

【问题讨论】:

  • 请发布您在创建Minimal, Complete, and Verifiable Example 时使用的INSERT 语句。
  • 四个表中的每一个都需要在其paquete 列中具有该值,以便您能够将其插入到Paquete 表的paquete 列中。..
  • @MihaiChelaru 这是我的插入:插入 Empresarial 值 ('EMPPAQ001','SI','SI',50,1499.00);插入 Telefono 值 ('TELPAQ001','1000',249.00);插入电视值('TVSPAQ001','52',1,289.00);插入 TVTel 值('TVTPAQ001','1000','52',1,329.00);从 Empresarial 中选择 *;插入 Paquete 值 (1001,'Mensual','TVTPAQ001'),(1002,'Mensual','TVSPAQ001'),(1003,'Mensual','TELPAQ001'),(1004,'Mensual','EMPPAQ001' );
  • @ps2goat 我知道,我的四个表中的每一个都已经有了这些值,当我在 Paquete 表中插入时问题就来了。我不知道该怎么办。

标签: sql sql-server foreign-keys constraints


【解决方案1】:

在您的决赛桌定义中:

create table Paquete
(
    IDContrato int not null,
    TipoCon varchar (11) not null,
    paquete varchar(10) not null,
    constraint pk_IDContrato primary key(IDContrato),
    constraint fk_paquete_empresarial foreign key (paquete) references Empresarial(paquete),
    constraint fk_paquete_telefono foreign key (paquete) references Telefono(paquete),
    constraint fk_paquete_tvtel foreign key (paquete) references TVTel(paquete),
    constraint fk_paquete_tv foreign key (paquete) references TV(paquete)
);

您已声明,在每一行中,paquete 必须与所有其他 4 个表中的 paquete 列匹配。不是至少其中一个,而是全部。

您不能从一个表中获得一个外键引用来匹配多个表中的一个。每行的该列都需要每个“约束”。

【讨论】:

  • 所以这意味着我的设计不是它应该的样子?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多