admin

SQL Server级联

sql

我正在建立一个网站,用户可以在其中发布“帖子”,然后用户可以在这些帖子上“发表评论”。我有一个包含3个表的数据库。一个包含用户信息,一个包含发布信息,最后一个包含评论信息。

我想设置规则,以便如果删除用户,则删除其所有帖子和评论,如果用户删除其帖子之一,则删除所有相关评论。但是,这将设置“多个CASCADE路径”。

我一直在寻找解决方案,并找到了一些有关触发器的信息。它们会是最好的东西吗?如果使用它们,是否必须更改所有CASCADES才能由触发器完成?

谢谢


阅读 295

收藏
2021-07-01

共1个答案

admin

另一个选择是创建两个专用的存储过程,这些存储过程将根据需要执行这些删除步骤

CREATE PROCEDURE dbo.DeleteUser @UserID VARCHAR(50)
AS BEGIN
   DELETE FROM dbo.Comments
   WHERE Author = @UserID

   DELETE FROM dbo.Posts
   WHERE Author = @UserID

   DELETE FROM dbo.User
   WHERE UserID = @UserID
END

对于第二条规则:

CREATE PROCEDURE dbo.DeletePost @PostID INT
AS BEGIN
   DELETE FROM dbo.Comments
   WHERE PostID = @PostID

   DELETE FROM dbo.Posts
   WHERE ID = @PostID
END

在这种情况下,您可以完全控制实际发生的事情,级联删除不会有意外的意外,也不需要使用触发器。

2021-07-01