分析SQL Server级联删除的实现

日期: 2010-10-26 作者:佚名 来源:TechTarget中国

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

  表内自关联不支持级联删除和级联更新

  一个表内在有多个列同时关联于另一个表时,不支持多个级联删除

  还有什么循环级联删除限制,等等

  …….

  一大堆限制,如果要迁移Oracle到SqlServer麻烦多多,特别对于用于构造树型结构的表内自关联(比如部门表)的级联删除特别讨厌

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

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

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

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

  IF EXISTS (SELECT NAME FROM SYSOBJECTS
  WHERE NAME = ‘DEL_DOCUMENTTYPE_001’ AND TYPE = ‘TR’)
  DROP TRIGGER DEL_DOCUMENTTYPE_001
  GO
  CREATE TRIGGER DEL_DOCUMENTTYPE_001
  ON dbo.DOCUMENTTYPE
  FOR DELETE
  AS
  IF (SELECT COUNT(*) FROM DELETED) > 0
  DELETE FROM dbo.DOCUMENTTYPE WHERE UPNO IN (SELECT NO FROM DELETED)
  GO

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

电子邮件地址不会被公开。 必填项已用*标注

敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。

作者

佚名
佚名

相关推荐