【发布时间】:2013-11-08 23:46:23
【问题描述】:
我创建了两个表,Customers 和 Records。 Records 对 customerID 有一个外键约束。当我尝试向已经存在的客户插入记录时,它给了我这个错误:
Message (The INSERT statement conflicted with the FOREIGN KEY constraint "FK_REC_cstmr_int_id". The conflict occurred in database "Omitted", table "dbo.CST_NEW_CUSTOMER", column 'cstmr_int_id'.)
这里是插入代码:
INSERT INTO [Omitted].[dbo].[REC_NEW_RECORDS]
([cstmr_int_id]
,[xml_tx]
VALUES
(10
,'<test>test</test>'
GO
我在这里找到的大多数相关问题都涉及以错误的顺序插入,但我可以选择 id 为 10 的客户。任何指针将不胜感激。
编辑 1:这将返回一位客户
SELECT [cstmr_int_id]
FROM [Omitted].[dbo].[CST_NEW_CUSTOMER] WHERE cstmr_int_id =10
编辑 2:这是记录表的创建脚本
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[REC_NEW_RECORDS](
[rec_int_id] [int] IDENTITY(1,1) NOT FOR REPLICATION NOT NULL,
[cstmr_int_id] [int] NOT NULL,
[xml_tx] [varchar](max) NULL,
CONSTRAINT [REC_PK_rec_int_id] PRIMARY KEY CLUSTERED
(
[rec_int_id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF,ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
SET ANSI_PADDING OFF
GO
ALTER TABLE [dbo].[REC_NEW_RECORDS] WITH CHECK ADD CONSTRAINT [FK_REC_cstmr_int_id] FOREIGN KEY([cstmr_int_id])
REFERENCES [dbo].[CST_NEW_CUSTOMER] ([cstmr_int_id])
GO
【问题讨论】:
-
你是说
dbo.cst_new_customer有10的记录,SQL Server喝醉了? -
我建议再次仔细查看该 FK 的代码。只有当 PK 表中没有 ID 为 10 的记录时,才会出现该错误。确保 FK 确实按照您认为的方式构建,并且父表中的 ID 确实存在。
-
但是您的错误表明 cstmr_int_id 列上的
dbo.CST_NEW_CUSTOMER和dbo.REC_NEW_RECORDS之间存在 FK 关系。如果你写了SELECT * FROM dbo.CST_NEW_CUSTOMER C WHERE C.cstmr_int_id = 10,你会得到结果吗? -
ALTER TABLE [dbo].[REC_NEW_RECORDS] WITH CHECK ADD CONSTRAINT [FK_REC_cstmr_int_id] FOREIGN KEY([cstmr_int_id]) REFERENCES [dbo].[CST_NEW_CUSTOMER] ([cstmr_int_id])REC_NEW_RECORDS 之前,指定的cstmr_int_id 必须 已经存在于CST_NEW_CUSTOMER中。由于您的约束指定了 WITH CHECK,这意味着它是有效的(如果您禁用它,它会被标记为不受信任并允许您违反 RI)。这是按预期工作的关系完整性。 -
当您清理代码以使其对这些受众更友好时,也许在您的清理过程中您已经设法修复了任何损坏的地方。使用
TCO514之类的表名,这很容易做到
标签: sql sql-server sql-server-2008