SQL Server 2005插入外键冲突

时间:2014-03-05 22:05:07

标签: sql sql-server sql-server-2005

我查看了其他几个有这个总标题的帖子,但无法找到这个问题的答案。我有两张桌子,“考试”和“保持”。我在“检查”表(主键“登录”)中插入了两行,并且我尝试使用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”,列“加入”中。“

我错过了什么?

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

您违反了外键约束。 您是将RAM1093129插入考试(加入)列,但随后使用1093129暂停