【发布时间】:2018-03-28 05:26:40
【问题描述】:
我有一列检查列上的 FK 约束并允许 NULL。但是,即使主表中没有 ID 为 0 的行,它也允许将 0 作为值。
此插入发生在 .NET 的批量插入上。但是,如果我在 SQL Server 中直接将值更改为有效数字并返回 0,则它不会允许。
所以不知何故,批量插入允许 0 被允许,有什么原因吗?
【问题讨论】:
标签: sql .net sql-server foreign-keys sqlbulkcopy
我有一列检查列上的 FK 约束并允许 NULL。但是,即使主表中没有 ID 为 0 的行,它也允许将 0 作为值。
此插入发生在 .NET 的批量插入上。但是,如果我在 SQL Server 中直接将值更改为有效数字并返回 0,则它不会允许。
所以不知何故,批量插入允许 0 被允许,有什么原因吗?
【问题讨论】:
标签: sql .net sql-server foreign-keys sqlbulkcopy
默认情况下,BULK INSERT 忽略检查和外键约束。您可以使用CHECK_CONSTRAINTS 打开它们。
这在文档中有解释:
CHECK_CONSTRAINTS
指定目标表或视图上的所有约束都必须是 在批量导入操作期间检查。没有 CHECK_CONSTRAINTS 选项,任何 CHECK 和 FOREIGN KEY 约束都是 忽略,操作后对表的约束为 标记为不受信任。
【讨论】:
SqlBulkCopyOptions.CheckConstraints 是我的设置