我正在将删除级联添加到表中。该Clone
表具有一列DeviceID
,该列是该Device
表的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。一种测试方法是在ALTER TABLE语句中添加“ WITH(NOCHECK)”,然后查看是否可以创建约束。
如果确实允许您使用NOCHECK创建约束,则可以保留该约束,而该约束将仅用于测试将来的插入/更新,也可以调查数据以解决FK违例问题。
因此,您的示例将是:
ALTER TABLE Clone WITH NOCHECK
ADD CONSTRAINT FK_Clone_Device_Cascade
FOREIGN KEY (DeviceID) REFERENCES Device(DeviceID) ON DELETE CASCADE
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句