2011-10-16 7 views
0

こんにちは、INSERTステートメントは、NULLが指定されていてもFOREIGN KEY制約と競合しました。

私は外部キー値(ID)を含むテーブルを持っています。このフィールドはnullにすることができますが、問題は、私はこれをnullに設定した場合、私は次の例外を取得することです:

FOREIGN KEY制約と競合INSERT文

なぜ?

USE [biss] 
GO 

/****** Object: Table [dbo].[VoucherCodes] Script Date: 10/16/2011 19:55:16 ******/ 
SET ANSI_NULLS ON 
GO 

SET QUOTED_IDENTIFIER ON 
GO 

CREATE TABLE [dbo].[VoucherCodes](
    [Id] [int] IDENTITY(1,1) NOT NULL, 
    [Code] [nvarchar](50) NOT NULL, 
    [StartDate] [datetime] NOT NULL, 
    [EndDate] [datetime] NOT NULL, 
    [InactivatedDate] [datetime] NULL, 
    [AdCategoryId] [int] NULL, 
CONSTRAINT [PK_VoucherCodes] PRIMARY KEY CLUSTERED 
(
    [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].[VoucherCodes] WITH CHECK ADD 
    CONSTRAINT [FK_VoucherCodes_AdCategories] FOREIGN KEY([AdCategoryId]) 
    REFERENCES [dbo].[AdCategories] ([Id]) 
    ON UPDATE SET NULL 
GO 

ALTER TABLE [dbo].[VoucherCodes] CHECK CONSTRAINT [FK_VoucherCodes_AdCategories] 
GO 

ALTER TABLE [dbo].[VoucherCodes] WITH CHECK ADD 
    CONSTRAINT [FK_VoucherCodes_VoucherCodes] FOREIGN KEY([Id]) 
    REFERENCES [dbo].[VoucherCodes] ([Id]) 
GO 

ALTER TABLE [dbo].[VoucherCodes] CHECK CONSTRAINT [FK_VoucherCodes_VoucherCodes] 
GO 

ALTER TABLE [dbo].[VoucherCodes] WITH CHECK ADD 
    CONSTRAINT [FK_VoucherCodes_VoucherCodes1] FOREIGN KEY([Id]) 
    REFERENCES [dbo].[VoucherCodes] ([Id]) 
GO 

ALTER TABLE [dbo].[VoucherCodes] CHECK CONSTRAINT [FK_VoucherCodes_VoucherCodes1] 
GO 

ALTER TABLE [dbo].[VoucherCodes] ADD 
    CONSTRAINT [DF_VoucherCodes_Inactive] DEFAULT ((1)) FOR [InactivatedDate] 
GO 
+0

スキーマとエラーメッセージが参考になっだろう。 – GriffinHeart

+0

テーブルに他の外部キーはありませんか? (確かに...) –

+0

失敗したコードは何ですか?完全なCREATE TABLEを追加することもできます – gbn

答えて

5

あなたの外部キーは、円形のFK制約を参照する2つの自己から来ている:それは

EDIT1 NULL可能です。

自分自身のFKとしてID列を持っています。INSERT時には存在しないため、もちろん失敗します。

実行この

ALTER TABLE [dbo].[VoucherCodes] 
    DROP CONSTRAINT FK_VoucherCodes_VoucherCodes, FK_VoucherCodes_VoucherCodes1