我花了很多时间试图弄清楚如何在SQL Server上为递归主键实现CASCADE ON DELETE一段时间了.我已经阅读了有关触发器,创建临时表等的信息,但还没有找到适用于我的数据库设计的答案.
这是一个Boss/Employee数据库示例,可用于演示目的:
TABLE employee
id|name |boss_id
--|---------|-------
1 |John |1
2 |Hillary |1
3 |Hamilton |1
4 |Scott |2
5 |Susan |2
6 |Seth |2
7 |Rick |5
8 |Rachael |5
Run Code Online (Sandbox Code Playgroud)
如您所见,每位员工都有一名也是员工的老板.所以,id/boss_id上存在PK/FK关系.
这是一个(缩写)表及其信息:
TABLE information
emp_id|street |phone
------|-----------|-----
2 |blah blah |blah
6 |blah blah |blah
7 |blah blah |blah
Run Code Online (Sandbox Code Playgroud)
employee.id/information.emp_id上有一个带有CASCADE ON DELETE的PK/FK.
例如,如果Rick被解雇,我们会这样做:
DELETE FROM employee WHERE id=7
Run Code Online (Sandbox Code Playgroud)
这应该从员工和信息中删除Rick的行.Yay级联!
现在,说我们经历了艰难时期,我们需要奠定汉密尔顿和他的整个部门.这意味着我们需要删除
我们运行时从员工和信息表中:
DELETE FROM employee WHERE id=3 …Run Code Online (Sandbox Code Playgroud)