0

Application、Control、Application Control の 3 つのテーブルがあります。これは、基本的に 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 を挿入することはできず、これら 2 つの関係に違いはありません。

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
4

2 に答える 2

0

このような場合は、Profiler をオンにして、挿入しようとしている値を正確に確認することをお勧めします。これにより、問題が発生している理由が明らかになる可能性があります。私の最も可能性の高い推測は、コードが何らかの設定を忘れたため、2 番目のテーブルの挿入に送信される値が NULL であるということです。

于 2013-07-10T14:44:45.710 に答える