出现这个错误,是因为插入一个长度为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语句做一些判断,就可以解决异常的出现。