这是我的任务:编写一个脚本,其中包含两个编码为事务的sql语句,以便从中删除customer id为8的行 Customers
table。为此,必须首先从中删除该客户的所有地址 Addresses
table。
如果这些语句执行成功,请提交更改。否则,请回滚更改。
我的问题是,我得到了一个类似这样的错误:
消息547,16级,状态0,第9行
delete语句与引用约束“fk\uuu orders\uuu customer\uuu 35bcfe0a”冲突。冲突发生在数据库“myguitarshop”、表“dbo.orders”、列“customerid”中。
我的代码:
BEGIN TRAN;
DELETE FROM Addresses
WHERE CustomerID = 8;
DELETE FROM Customers
WHERE CustomerID = 8;
IF @@ROWCOUNT > 1
BEGIN
ROLLBACK TRAN
PRINT 'did not delete'
END
ELSE
BEGIN
COMMIT TRAN;
END
谢谢您!
2条答案
按热度按时间50pmv0ei1#
只要客户引用数据库中的任何表,就不能删除它。根据引用约束错误消息customerid=8 have some order on table“dbo.orders”,列“customerid”被引用到customers,因此customerid=8没有删除。
首先,您需要从dbo.orders表中删除订单,以便custormerid=8或使用
在外键约束定义中。
axr492tv2#
当另一行依赖某行时,您正试图删除该行。这就是所谓的参照完整性。它的存在是为了防止孤立的行。
您需要删除其他地方依赖于customer id 8的所有行。
在这种情况下,它是:-
但站在你的立场上,我可能会评论你为什么要这么做,甚至会和给你安排任务的人谈谈,问问这是否可以接受。