gpt4 book ai didi

sql-server - 添加约束与自身冲突,即使它还不存在

转载 作者:行者123 更新时间:2023-12-03 18:30:17 25 4
gpt4 key购买 nike

我正在向表中添加删除级联。 Clone表有一列DeviceID那是 Device 的外键餐 table DeviceID柱子。所以 SQL 脚本删除了原来的 FK 约束,并尝试添加新的约束:

IF EXISTS
(
SELECT *
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS
WHERE CONSTRAINT_NAME = 'FK_Clone_Device'
)
BEGIN
ALTER TABLE Clone
DROP CONSTRAINT FK_Clone_Device
END

IF NOT EXISTS
(
SELECT *
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS
WHERE CONSTRAINT_NAME = 'FK_Clone_Device_Cascade'
)
BEGIN
ALTER TABLE Clone
ADD CONSTRAINT FK_Clone_Device_Cascade
FOREIGN KEY (DeviceID) REFERENCES Device(DeviceID) ON DELETE CASCADE
END

当我运行此脚本时,出现以下错误:
 The ALTER TABLE statement conflicted with the FOREIGN KEY constraint "FK_Clone_Device_Cascade". The conflict occurred in database "DevelopmentDB", table "dbo.Device", column 'DeviceID'.

也许我误解了错误消息,但听起来它与自身发生冲突。我很困惑它发生在 Device表虽然。
Clone中有索引表 DeviceID .那有关系吗?

这是在 SQL SERVER R2 (Azure) 上

最佳答案

听起来您目前表中的数据会违反您尝试创建的 FK。对此进行测试的一种方法是将“WITH (NOCHECK)”添加到 ALTER TABLE 语句,然后查看它是否允许您创建约束。

如果它确实允许您使用 NOCHECK 创建约束,您可以保持这种方式并且约束将仅用于测试 future 的插入/更新,或者您可以调查您的数据以修复 FK 违规。

所以你的例子是:

ALTER TABLE Clone WITH NOCHECK
ADD CONSTRAINT FK_Clone_Device_Cascade
FOREIGN KEY (DeviceID) REFERENCES Device(DeviceID) ON DELETE CASCADE

关于sql-server - 添加约束与自身冲突,即使它还不存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27553809/

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