OracleSQLServer表内自关系级联删除

明日拍卖SQLServer级联删除遭遇了很蛋疼的事。

SQLServer 不接济表内自关系级联删除,而MySql和Oracle却支持。

一般原因是SQLServer 会暴发循环级联,就不给这么弄。所以很分明说:SQLServer 是不协理表内自关系级联删除。

那咋做吧:只可以用触发器呗

IF EXISTS (SELECT NAME FROM SYSOBJECTS
      WHERE NAME = 'tg_SysDelete' AND TYPE = 'TR')
   DROP TRIGGER tg_SysDelete
GO

CREATE TRIGGER tg_SysDelete
ON SysSiteMap
FOR DELETE 
AS 
IF (SELECT COUNT(*) FROM DELETED) > 0
   DELETE FROM SysSiteMap WHERE ParentId  IN (SELECT Id FROM DELETED)
GO  

PS:SQLServer为各类触发器都创制了多少个专用表:Inserted表和Deleted表。那四个表。

单单是那样是级联删除不了的,必要打开数据库的递归触发器功用

打开办法:手动设置:数据库上点右键->属性->选项 设置
递归触发器已启用 为 true

             sql语句启动:ALTER DATABASE 数据库名称 SET
RECURSIVE_TRIGGERS ON

 貌似SQLServer还有以下难点:

一个表内在有四个列同时涉嫌于另一个表时,不帮衬七个级联删除
,循环级联删除限制

相关文章