SQLServer表内自关联级联删除

系统 2726 0

今天处理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还有以下问题:

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

SQLServer表内自关联级联删除


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论