SQLServer级联删除的实现

数据库 SQL Server
如果我们想要在SQLServer数据库中实现级联删除,应该怎么做呢?下面为您介绍一个SQLServer级联删除的实现方法,希望对您有所帮助。

SQLServer 2000与Oracle 8i相比,SQLServer级联删除有太多的限制,下面就为您介绍SQLServer级联删除的实现方法,供您参考。

表内自关联不支持级联删除和级联更新
一个表内在有多个列同时关联于另一个表时,不支持多个级联删除
还有什么循环级联删除限制,等等
.......
一大堆限制,如果要迁移Oracle到SqlServer麻烦多多,特别对于用于构造树型结构的表内自关联(比如部门表)的级联删除特别讨厌

考虑来考虑去,对于SqlServer不能支持的诸多SQLServer级联删除只有采用最原始的方法,彻底不用外键关联,而是用触发器来解决

以下是经过验证的触发器实现范例(自关联例子)

放弃外键关联后所有的完整性检查都要通过触发器实现

--DELETE 级联删除,先删除,再删除所有级联的记录,采用递归触发器,当然要求数据库支持递归触发器功能开启(数据库属性设置中开启他),不过SqlServer只支持32级的递归啊

  1. IF EXISTS (SELECT NAME FROM SYSOBJECTS  
  2.       WHERE NAME = 'DEL_DOCUMENTTYPE_001' AND TYPE = 'TR')  
  3.    DROP TRIGGER DEL_DOCUMENTTYPE_001  
  4. GO  
  5.  
  6. CREATE TRIGGER DEL_DOCUMENTTYPE_001  
  7. ON dbo.DOCUMENTTYPE  
  8. FOR DELETE   
  9. AS   
  10. IF (SELECT COUNT(*) FROM DELETED) > 0  
  11.    DELETE FROM dbo.DOCUMENTTYPE WHERE UPNO IN (SELECT NO FROM DELETED)  
  12. GO     
  13.  

 

 

 

 

 

【编辑推荐】

sqlserver sa用户密码问题集锦

sqlserver分发服务器的设置

SqlServer唯一约束的创建

sqlserver分页存储过程实例

SqlServer唯一约束的删除方法

责任编辑:段燃 来源: 互联网
相关推荐

2010-11-10 11:47:35

SQL Server级

2010-11-10 11:51:04

SQL SERVER级

2009-06-17 10:47:36

Hibernate级联级联删除

2010-09-02 09:45:07

SQL删除

2009-09-15 14:52:15

linq级联删除

2010-10-22 17:38:02

SQL Server级

2011-07-19 09:18:50

Oracle级联删除

2010-04-23 15:44:29

Oracle 外键

2010-10-19 16:34:10

SqlServer唯一

2011-09-13 10:25:05

数据库点滴

2010-09-01 16:40:00

SQL删除触发器

2011-03-22 12:59:18

SQLOracle外键约束

2010-09-01 16:17:40

SQL删除日志

2010-07-15 10:48:48

SQL Server2

2023-05-09 07:38:57

jQueryAjax代码

2010-07-08 14:53:38

SQLServer实现

2024-02-01 09:06:44

Company​Employee场景

2010-11-23 14:40:04

MySQL多表删除

2010-10-15 15:02:37

Mysql多表删除

2024-01-08 08:50:19

Vue3级联菜单数据懒加载
点赞
收藏

51CTO技术栈公众号