我查看了其他几个有这个总标题的帖子,但无法找到这个问题的答案。我有两张桌子,“考试”和“保持”。我在“检查”表(主键“登录”)中插入了两行,并且我尝试使用SQL Server Management Studio将一个键插入“保持”表中。我在“考试”表中看到了数据,在“登录”字段中有一个值;但是我无法在“保持”表中插入相应的值。
这是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”,列“加入”中。“
我错过了什么?
答案 0 :(得分:1)
看起来您的键值不匹配。在考试中,您的关键值是'RAM1093129'和'RAM1093130',但在保留时它们是'1093129'和'1093130'。使两个表的加入列的值相同,看看会发生什么。
答案 1 :(得分:0)
您违反了外键约束。
您是将RAM1093129
插入考试(加入)列,但随后使用1093129
暂停