【问题标题】:Insert Into, Conflit with Foreign Key插入,与外键冲突
【发布时间】:2024-01-24 04:49:01
【问题描述】:
create table Interventions
(

    InterventionID BIGINT IDENTITY (1,1) PRIMARY KEY NOT NULL,
    InterventionCustomerID BIGINT FOREIGN KEY REFERENCES Customer(CustomerID) NOT NULL,
    InterventionMalfunctionDescription NVARCHAR(MAX) NOT NULL,
    CustomerID BIGINT FOREIGN KEY REFERENCES Customer(CustomerID),
    EmployeeID INT FOREIGN KEY REFERENCES Employees(EmployeeID),
    TypeOfEquipementID INT FOREIGN KEY REFERENCES TypeOfEquipements(TypeOfEquipementID),
    StatusID INT FOREIGN KEY REFERENCES TypeOfStatus(StatusID),
    SerialNumber VARCHAR(255) FOREIGN KEY REFERENCES SerialNumbers(SerialNumber),
    GroupID INT FOREIGN KEY REFERENCES TypeOfGroup(GroupID) NOT NULL,
    InterventionCreateDate DATETIME NOT NULL,
    InterventionStartDate DATETIME,
    InterventionFinnishDate DATETIME,
    InterventionArchiveDate DATETIME

);

create table Customer
(
CustomerID BIGINT IDENTITY(1,1) PRIMARY KEY NOT NULL,
OrganizationName VARCHAR(255) NOT NULL,
Telephone VARCHAR(255),
MobileTelephone VARCHAR(255) NOT NULL,
CustomerAdressLine1 VARCHAR(255) NOT NULL,
CustomerAdressLine2 VARCHAR(255),
PostalCode VARCHAR(255) NOT NULL,
FederalTaxID VARCHAR(255) UNIQUE NOT NULL,
EmailAddress VARCHAR(255) UNIQUE NOT NULL,
SageCustomerID BIGINT UNIQUE

);


INSERT INTO Interventions(InterventionCustomerID, InterventionMalfunctionDescription, CustomerID, EmployeeID, TypeOfEquipementID, StatusID, SerialNumber, GroupID, InterventionCreateDate, InterventionStartDate, InterventionFinnishDate, InterventionArchiveDate) VALUES
('1', 'abc', '4', '4', '1', '1', 'SerialNumber1', '1', '2019-01-01', '2019-01-02', '2019-01-03', '2019-01-04'),
('2', 'abc', '5', '5', '2', '2', 'SerialNumber2', '2', '2019-02-01', '2019-02-02', '2019-02-03', '2019-02-03'),
('3', 'abc', '6', '6', '3', '3', 'SerialNumber3', '3', '2019-03-01', '2019-03-02', '2019-03-03', '2019-03-04');

Select * from Customer;

错误:

INSERT 语句与 FOREIGN KEY 约束“FK__Intervent__Inter__6C190EBB”冲突。冲突发生在数据库“ADSGLOBAL”、表“dbo.Customer”、列“CustomerID”中。

【问题讨论】:

  • CustomerID 4、5 和 6 是否存在于 dbo.Customer 中?
  • 在 dbo.Custommer 中存在的 CusomeID 4,5 和 6
  • 你为什么把你的 all 值当作 strings?如果您尝试一次插入一行会发生什么?他们都是错误的,还是只有一两个?最后,你从SELECT * FROM dbo.Customer WHERE CustomerID IN (1, 2, 3, 4, 5, 6)得到什么?
  • 我放了关于 SELECT * FROM Customer 的图片;
  • 我已经修复了我的错误,谢谢,伙计们!

标签: sql sql-server tsql sql-insert


【解决方案1】:

您对 InterventionCustomerID 有一个约束,表示它引用了 Customer(CustomerID)

您的插入语句说您正在尝试将值 123 插入该列。

您的SELECT * FROM customer 表明客户123 不存在于该表中。


Customer 表中创建客户123 之前,您无法插入记录。

【讨论】:

  • @BrunoMiguel - 那么请随时接受这个作为正确答案。 (点击“打勾”标记。)