gpt4 book ai didi

sql-server - 违反外键 (SQL Server 2012)

转载 作者:行者123 更新时间:2023-12-02 03:43:34 26 4
gpt4 key购买 nike

我很惊讶地发现子表有一些父表没有的键,并且在插入数据时 SQL Server 没有给出任何错误。我使用 bcp 命令将数据从 .csv 文件加载到父表和子表中。

我可以看到外键约束已启用。

子表中使用的约束是:

ALTER TABLE [dbo].child WITH NOCHECK 
ADD CONSTRAINT [FK_child_Parent]
FOREIGN KEY(company_id) REFERENCES [dbo].[Parent] (company_id)
GO

ALTER TABLE [dbo].child CHECK CONSTRAINT [FK_child_Parent]
GO

当我插入一些记录时,SQL Server 会因违反外键而引发错误,这很好,但我很困惑为什么 SQL Server 在填充此数据时没有引发任何错误?

此外,我还通过执行以下查询重新验证了现有记录是否违反外键,并得到了预期的错误。

ALTER TABLE child
WITH CHECK CHECK CONSTRAINT ALL
GO

最佳答案

默认情况下,bcp 在插入数据时会忽略约束。如果您希望 bcp 遵守约束,则需要启用该功能。 From the docs (强调我的):

CHECK_CONSTRAINTS: Specifies that all constraints on the target table or view must be checked during the bulk-import operation. Without the CHECK_CONSTRAINTS hint, any CHECK and FOREIGN KEY constraints are ignored, and after the operation the constraint on the table is marked as not-trusted.

因此您运行的命令应如下所示:

bcp <current parameters> -h"CHECK_CONSTRAINTS"

关于sql-server - 违反外键 (SQL Server 2012),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47558336/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com