删除主记录时,将触发级联触发器并删除子表中的记录。 而且我无法从表中手动删除记录,因为它与子表有外键关系。
但是如何防止从表中手动删除子记录。目前,我可以手动删除子记录和页面加载,因为子记录丢失且页面加载失败。
答案 0 :(得分:1)
我有点不清楚你为什么要做这样的事情。除了级联删除之外,您根本不允许删除UI上的子记录 - 只是不要给用户选项。
如果你担心一些随机的DBA进入你的数据库并写下:
delete from childTable where parentId = 5 -- or whatever
然后我认为您还有更多需要担心的事情......例如,为什么拥有生产数据库写访问权限的人甚至考虑在您的prod数据库上手动编写和执行此类语句。
如果你仍然真的需要做这样的事情。您可以在所有子表上编写一个删除前触发器,以确保在删除之前父表中不存在parentId。这将可能导致您的级联删除失败(我猜),因此您需要更新级联删除功能以在删除之前禁用触发器,之后重新启用触发器。但这不会阻止你的“随机dba”通过禁用触发器,删除记录和重新启用来做类似的事情。
如果您提供有关“手动”删除子记录的具体方案的更多信息,可能会提供更多信息。
答案 1 :(得分:1)
我不确定从这个表中手动删除记录的人或者是什么,但我倾向于使用 DENY 权限来满足此要求,并确保其中的所有角色数据库对该表没有delete
权限。
示例脚本:
USE [YOUR_DB]
GO
DENY DELETE ON [dbo].[YOUR_TABLE] TO [DOMAIN\user]
GO
将[dbo]
替换为相关架构名称,并将[DOMAIN\user]
替换为相关用户。