SQL Server 2005插入与外键冲突



我看了其他几篇带有这个通用标题的帖子,但都找不出这个问题的答案。我有两张桌子,"考试"one_answers"等待"。我已经在"检查"表(主键"登录")中插入了两行,并尝试使用SQLServerManagementStudio在每行的"保留"表中插入一个键。我在"考试"表中看到数据,在"加入"字段中有一个值;但我无法将相应的值插入到"保留"表中。

这是DDL:

CREATE TABLE [dbo].[exam](
[accession] [varchar](50) NOT NULL,
[MRN] [varchar](50) NOT NULL,
[serviceDate] [datetime] NOT NULL,
[location] [varchar](50) NULL,
[modality] [varchar](20) NOT NULL,
[billedDate] [datetime] NULL,
[billingFile] [varchar](100) NULL,
[message] [text] NULL,
CONSTRAINT [PK__exam__1ED998B2] PRIMARY KEY CLUSTERED 
(
[accession] ASC
)
)
CREATE TABLE [dbo].[hold](
[accession] [varchar](50) NOT NULL,
[reason] [varchar](100) NOT NULL,
[held] [datetime] NOT NULL,
[resolved] [datetime] NULL
) 
GO
ALTER TABLE [dbo].[hold]  WITH CHECK ADD  CONSTRAINT [FK__hold__accession__20C1E124] FOREIGN KEY([accession])
REFERENCES [dbo].[exam] ([accession])
ALTER TABLE [dbo].[hold] CHECK CONSTRAINT [FK__hold__accession__20C1E124]

下面是我试图插入的内容:

begin tran
insert into exam
(accession,mrn,servicedate,location,modality)
values
('RAM1093129','RAM3202911','2014-03-05 10:06:52','HAM','CR')
insert into exam
(accession,mrn,servicedate,location,modality)
values
('RAM1093130','RAM3202911','2014-03-05 10:04:49','HAM','CR')
commit
begin tran
insert into hold
(accession,held,reason)
values
('1093129',getdate(),'Sue - check insurance')
insert into hold
(accession,held,reason)
values
('1093130',getdate(),'Sue - check insurance')
commit

在第一个事务之后,我运行了"select*from exam where accession='[两个登录号中的每一个]',并确认记录存在于表中。但当我尝试运行第二个事务时,我得到了"INSERT语句与FOREIGN KEY约束冲突"FK_hold_accession_20C1E124"。冲突发生在数据库"MBMS_Track"、表"dbo.exam"、列"accession"中。">

我错过了什么?

看起来您的键值不匹配。在考试中,您的键值是"RAM1093129"one_answers"RAM1093130",但在保留中,它们是"1093129和"1093130"。使两个表的登录列的值相同,看看会发生什么。

您违反了外键约束。您正在将RAM1093129插入检查(登录)列,但随后在保留中使用1093129

最新更新