簡體   English   中英

插入語句與外鍵約束沖突-SQL Server 2012

[英]The insert statement conflicted with the foreign key constraint - SQL Server 2012

我有3個表:Application,Control和Application Control,這基本上是Application和Control之間的多對多關系。

應用表

App_ID int (PK)
.....

ApplicationControl表

FK_APP_ID int (PK)
FK_Controls_ID (PK)

和控制表

ID int (PK)
Name varchar(50)     

App表和Control表都填充了一些條目。 當我嘗試在ApplicationControl表中插入一個條目(從App獲取ID和從Control獲取ID)時,它說:

The Insert statement conflicted with the FOREIGN KEY constraint 
(between ApplicationControl and Control) The conflict occured in table Control,
column ID. 

有什么想法嗎? 它可以插入應用程序ID,但不能插入控件ID,並且這兩個關系之間沒有任何區別。

USE [PicknickDB]
GO

/****** Object:  Table [dbo].[ApplicationControl]    Script Date: 7/10/2013 3:21:29 PM  ******/ 
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE TABLE [dbo].[ApplicationControl](
[FK_App_ID] [int] NOT NULL,
[FK_Controls_ID] [int] NOT NULL,
CONSTRAINT [PK_ApplicationControl] PRIMARY KEY CLUSTERED 
(
[FK_App_ID] ASC,
[FK_Controls_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]

 GO

 ALTER TABLE [dbo].[ApplicationControl]  WITH CHECK ADD  CONSTRAINT       [FK_MapAppControls_Applications] FOREIGN KEY([FK_App_ID])
REFERENCES [dbo].[Application] ([App_ID])
ON UPDATE CASCADE
ON DELETE CASCADE
GO

ALTER TABLE [dbo].[ApplicationControl] CHECK CONSTRAINT   [FK_MapAppControls_Applications]
GO

ALTER TABLE [dbo].[ApplicationControl]  WITH CHECK ADD  CONSTRAINT [FK_MapAppControls_Controls] FOREIGN KEY([FK_App_ID])
REFERENCES [dbo].[Control] ([ID])
ON UPDATE CASCADE
ON DELETE CASCADE
GO

ALTER TABLE [dbo].[ApplicationControl] CHECK CONSTRAINT [FK_MapAppControls_Controls]
GO
ALTER TABLE [dbo].[ApplicationControl]  WITH CHECK ADD  CONSTRAINT 

[FK_MapAppControls_Controls] FOREIGN KEY([FK_App_ID]) --Really?

REFERENCES [dbo].[Control] ([ID])
ON UPDATE CASCADE
ON DELETE CASCADE

那么, FK_App_ID是否同時用作Application Control表的引用?

我建議應該改為FK_Controls_ID

在這種情況下,最好打開Profiler並確切查看它試圖插入的值。 這可能會導致了解為什么存在問題。 我最可能的猜測是,發送到第二張表的插入項的值為NULL,因為代碼忘記了對其進行設置。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM