开发者社区> 技术小美> 正文

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表。这两个表。

单单是这样是级联删除不了的,需要开启数据库的递归触发器功能

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

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

 貌似SQLServer还有以下问题:

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

分类: 7.后端基础


本文转自 海角在眼前 博客园博客,原文链接: http://www.cnblogs.com/lovesong/p/3258478.html  ,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
SQLServer删除登录记录用户名和密码
介绍: 作为一名开发人员都会知道我们做的项目都要用到数据库,数据库都需要账号和密码,然而问题来了,做的东西多了那些没用的账号和密码还在哪里纠缠着我们。所有我们不能忍了删除掉他。 网上很多都是2008的是删除方案,知道我看到了这篇:http://stackoverflow.
1721 0
SQL Server 2000删除表中的重复记录
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/chinahuyong/article/details/3551849  在SQL Server中除了对拥有十几条记录的表进行人工删除外,实现删除重复记录一般都是写一段代码,用游标的方法一行一行检查,删除重复的记录。
688 0
《零基础》MySQL删除数据表(十)
MySQL中删除数据表是非常容易操作的,但是你在进行删除表操作时要非常小心,因为执行删除命令后所有数据都会消失。 语法 以下为删除MySQL数据表的通用语法:
24 0
SQL Server中收缩、清空和删除数据库文件及日志文件
一、简单方法 –SQL Server收缩方法 1、右键数据库→属性→选项→故障还原模型→设为简单→确定; 2、右键数据库→所有任务→收缩数据库→确定; 3、右键数据库→属性→选项→故障还原模型→设为大容量日志记录→确定。
4719 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
29544 0
+关注
6819
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
JS零基础入门教程(上册)
立即下载
性能优化方法论
立即下载
手把手学习日志服务SLS,云启实验室实战指南
立即下载