我是新来的触发器,但我很难理解,如果我在这里采取正确的做法。删除SQL Server触发器 - 哪些记录在删除表中?
我正在使用SQL Server 2016.我有2个表,Teams
和TeamMembers
。 Teams
是父表,TeamMembers
是孩子,使用Teams.TeamID
作为外键。
我也有一个Activities
表记录任何创建或更新我的任何表。该表格有一个TableName
文本列以及一个IdRow
列,该列引用了创建或更新的行的ID。我还有一个JSONChanges
列,其中包含该活动日志项目中更改的JSON字符串。
所以在表格上每个Activity
只有1条记录。但是每个记录可能会执行许多活动。
所以,当用户删除一个团队,我不仅要删除所有记录的那支球队和那支球队的小组成员(这是很容易我Team_Delete
存储过程中做)的Activities
的,但我也想要删除我的Activities
表中TeamMembers
上活动的任何记录。由于Activities
表的IdRow
列点在TeamMembers
表中的列中,因此我无法使用删除存储过程中的TeamID
。
我的想法是在TeamMembers
表上创建一个删除触发器。
每当TeamMember
被删除时,我可以删除指向已删除记录的Activities
日志中的所有记录。这将简化我的Team_DELETE
存储过程。我认为。
我所遇到的困惑与在任何给定时间将在删除表中的记录有关。如果用户A删除了TeamMember,并且同时用户B在另一个Team Member上运行了更新,那么删除的表中是否有2条记录?如果我根据删除表中的内容删除活动表中的所有记录,那么我将删除不应删除的记录。对?
另一个问题是我该如何挑选一条记录来删除?我如何知道删除表中的哪个记录是我想要触发的那个记录?
欢迎所以!看看这篇文章,这将帮助你以更可能被回答的方式来优化你的问题。 –
删除表中的唯一记录是在单个批次中删除的记录。如果多行被删除,那么删除的表将包含所有被删除的记录。您可以将已删除的表格加入其他表格中,以确定还应该删除其他内容。看看这篇文章展示了如何限制删除和更新连接。 http://www.tech-recipes.com/rx/56823/delete-update-rows-using-inner-join-sql-server/ – Jeremy
你是否用你的表格之间的外键强制引用完整性(这好像是一种情况你应该在哪里)?如果是这样,你可以添加'在删除级联'和SQL服务器将为您处理这些删除,不需要触发器。 – Greenspark