The INSERT statement conflicted with the FOREIGN KEY constraint

出现这个错误,是因为插入一个长度为0的值至有外键约束的字段内。

我们来做个实验,并尝试解决它。

首先创建两个表,[dbo].[T1]是主表,[dbo].[T2]是子表,而子表的[c2]是一个有外键约束的字段。

View Code
CREATE TABLE [dbo].[T1]
(
    col1 NVARCHAR(20) PRIMARY KEY NOT NULL,
    col2 NVARCHAR(30) NULL,
    col3 NVARCHAR(30) NULL
)

GO

CREATE TABLE [dbo].[T2]
(
    c1 NVARCHAR(20) NOT NULL PRIMARY KEY,
    c2 NVARCHAR(20) NULL FOREIGN KEY REFERENCES [dbo].[T1] ([col1]),
    c3 NVARCHAR(30) NULL
)
GO


下面我们做实验,

我们再做一个实验:

 

什么情况?因为SQL有三值运算,TURE,FALSE 和UNKNOWN。约束其实是对满足条件,即条件表达式返回TRUE的一律通过。NULL在SQL SERVER里的类型是UNKNOWN,可以成理解为任何类型,可能为TRUE。而长度为 0的''空值,返回的将是False。

因此,我们在开SQL程序时,如果你的带有外键约束的字段,可以存储NULL值时,需要在插入的SQL语句做一些判断,就可以解决异常的出现。

 

posted @ 2013-04-07 10:47  Insus.NET  阅读(3076)  评论(0编辑  收藏  举报