在我的活动表中,我有一个StaffId字段。这是Staff表的FK(包含StaffId)。在将数据插入Activities表时 - 如果StaffId为null,则抛出FK约束错误!?我已经勾选了SSMS中的'Alllow Nulls'框,为什么不是这样呢?
注意,此记录是通过DbCommand.ExecuteNonQuery方法插入的。
另请注意:我刚刚使用SSMS运行了一个Insert语句来插入NULL值,并且它有效。可能这是一个更具C#的问题!?
答案 0 :(得分:3)
不,请看这个http://msdn.microsoft.com/en-us/library/ms175464.aspx
FOREIGN KEY约束不必仅链接到PRIMARY 另一个表中的KEY约束;它也可以定义为参考 另一个表中的UNIQUE约束的列。一把外国钥匙 约束可以包含空值;但是,如果有任何一列 复合FOREIGN KEY约束包含空值,验证 将跳过构成FOREIGN KEY约束的所有值。要做 确保复合FOREIGN KEY约束的所有值都是 已验证,请在所有参与列上指定NOT NULL。
您可以在MySql中看到另一个示例,请查看以下链接http://dev.mysql.com/doc/refman/5.0/en/innodb-foreign-key-constraints.html
您可以看到SET NULL
SET NULL:从父表中删除或更新行并设置 子表中的外键列或列为NULL。这是 仅在外键列没有NOT NULL时有效 指定的限定符。 ON DELETE SET NULL和ON UPDATE SET NULL 条款得到支持。
如果指定SET NULL操作,请确保尚未声明 子表中的列为NOT NULL。
答案 1 :(得分:1)
可以在@Martin上演示数据库。问题出在你的前端。 DbCommand处理NULL的问题,这是他们创建Linq To Sql的原因之一。
我建议你尝试这样的事情:
if(parameter_is_not_null)
db.AddInParameter(dbCommand, "staffId", DbType.String, staffId.Text);
else
db.AddInParameter(dbCommand, "staffId", DbType.String, DBNull.Value);