2011-10-16 1 views
0

Hi,Оператор INSERT противоречил ограничениям FOREIGN KEY, даже если его значение null?

У меня есть таблица, содержащая значение внешнего ключа (id). Это поле может быть пустыми, но проблема в том, что я получаю следующее исключение, если я установить его в нуль:

Заявления INSERT конфликтного с ограничением FOREIGN KEY

Почему? это обнуляемый

Edit1:

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.

У вас есть столбцы идентификаторов как сами FK: они, конечно, потерпят неудачу, потому что они не будут существовать во время INSERT.

Выполнить это

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