SQLServer表内打干级联删除

今拍卖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表。这半个说明。

唯有是这么是级联删除不了之,需要开数据库的递归触发器功能

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

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

 貌似SQLServer还有以下问题:

一个表内在有多单列又提到于其它一个表时,不支持多个级联删除
,循环级联删除限制

相关文章