sql server中带有delete语句的事务

xxslljrj  于 2021-07-24  发布在  Java
关注(0)|答案(2)|浏览(437)

这是我的任务:编写一个脚本,其中包含两个编码为事务的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

谢谢您!

50pmv0ei

50pmv0ei1#

只要客户引用数据库中的任何表,就不能删除它。根据引用约束错误消息customerid=8 have some order on table“dbo.orders”,列“customerid”被引用到customers,因此customerid=8没有删除。
首先,您需要从dbo.orders表中删除订单,以便custormerid=8或使用

ON DELETE CASCADE

在外键约束定义中。

axr492tv

axr492tv2#

当另一行依赖某行时,您正试图删除该行。这就是所谓的参照完整性。它的存在是为了防止孤立的行。
您需要删除其他地方依赖于customer id 8的所有行。
在这种情况下,它是:-

DELETE FROM Orders WHERE CustomerID = 8

但站在你的立场上,我可能会评论你为什么要这么做,甚至会和给你安排任务的人谈谈,问问这是否可以接受。

相关问题