SQL Server中类似Oracle中before触发器

本文涉及的产品
云数据库 RDS SQL Server,基础系列 2核4GB
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
简介: 有这样的应用情形,除了使用2表之间主外键约束中启用级联修改和级联删除这种SQL Server自带的解决方案外,我们还可以使用触发器来完成类似的功能,以下通过一个删除来举例说明: 假如一个SysFuncDic(功能字典表)、SysFuncRights(功能权限表),功能权限表中的FuncID和功能字典表中FuncID有外键约束关系,现在我们要删除SysFuncDic中的记录,因为做过外键约束关系,所以无法删除。

有这样的应用情形,除了使用2表之间主外键约束中启用级联修改和级联删除这种SQL Server自带的解决方案外,我们还可以使用触发器来完成类似的功能,以下通过一个删除来举例说明:

 

假如一个SysFuncDic(功能字典表)、SysFuncRights(功能权限表),功能权限表中的FuncID和功能字典表中FuncID有外键约束关系,现在我们要删除SysFuncDic中的记录,因为做过外键约束关系,所以无法删除。解决的办法是首先删除SysFuncRights表中所有与FuncID对应的记录即可。

 

create table SysFuncDic
(
  FuncID int not null identity(1,1) primary key,
  FuncName varchar(100)
)

create table SysFuncRights
(
   ID int not null primary key identity(1,1),
   FuncID int not null,
   EmpID int not null
)

insert into SysFuncDic values('AA')

insert into SysFuncDic values('BB')

insert into SysFuncDic values('CC')

insert into SysFuncRights values(1,12)
insert into SysFuncRights values(2,12)
insert into SysFuncRights values(3,12)

/***********************删除触发器**************************/
create trigger tri_delete on SysFuncDic
instead of delete
as
begin
  declare @FuncID int;
  select @FuncID = FuncID  from deleted;
  delete SysFuncDic where FuncID = @FuncID;
  delete SysFuncRights where FuncID = @FuncID;
end
/**********************************************************/
select * from SysFuncDic; --查询功能字典表记录

select * from SysFuncRights; --查询功能权限表中记录

delete from SysFuncDic where FuncID=1; --删除功能字典表中记录,进行测试


相关实践学习
使用SQL语句管理索引
本次实验主要介绍如何在RDS-SQLServer数据库中,使用SQL语句管理索引。
SQL Server on Linux入门教程
SQL Server数据库一直只提供Windows下的版本。2016年微软宣布推出可运行在Linux系统下的SQL Server数据库,该版本目前还是早期预览版本。本课程主要介绍SQLServer On Linux的基本知识。 相关的阿里云产品:云数据库RDS SQL Server版 RDS SQL Server不仅拥有高可用架构和任意时间点的数据恢复功能,强力支撑各种企业应用,同时也包含了微软的License费用,减少额外支出。 了解产品详情: https://www.aliyun.com/product/rds/sqlserver
相关文章
|
26天前
|
SQL 监控 Oracle
Oracle SQL性能优化全面指南
在数据库管理领域,Oracle SQL性能优化是确保数据库高效运行和数据查询速度的关键
|
28天前
|
SQL 存储 Oracle
Oracle数据库SQL语句详解与应用指南
在数字化时代,数据库已成为各类企业和组织不可或缺的核心组件。Oracle数据库作为业界领先的数据库管理系统之一,广泛应用于各种业务场景。掌握Oracle数据库的SQL语句是数据库管理员、开发人员及运维人员的基本技能。本文将详细介绍Oracle数据库SQL语句的基本概念、语法、应用及最佳实践。一、Or
42 3
|
29天前
|
SQL Oracle 关系型数据库
Oracle SQL:了解执行计划和性能调优
Oracle SQL:了解执行计划和性能调优
45 1
|
4月前
|
开发框架 Oracle 关系型数据库
ABP框架使用Oracle数据库,并实现从SQLServer中进行数据迁移的处理
ABP框架使用Oracle数据库,并实现从SQLServer中进行数据迁移的处理
|
3月前
|
Oracle 关系型数据库
Navicat 连接Oracle ORA-28547: connection to server failed, probable Oracle Net admin error
Navicat 连接Oracle ORA-28547: connection to server failed, probable Oracle Net admin error
100 0
|
4月前
|
SQL Oracle 关系型数据库
MySQL、SQL Server和Oracle数据库安装部署教程
数据库的安装部署教程因不同的数据库管理系统(DBMS)而异,以下将以MySQL、SQL Server和Oracle为例,分别概述其安装部署的基本步骤。请注意,由于软件版本和操作系统的不同,具体步骤可能会有所变化。
276 3
|
4月前
|
SQL 存储 Oracle
TDengine 3.3.2.0 发布:新增 UDT 及 Oracle、SQL Server 数据接入
**TDengine 3.3.2.0 发布摘要** - 开源与企业版均强化性能,提升WebSocket、stmt模式写入与查询效率,解决死锁,增强列显示。 - taos-explorer支持geometry和varbinary类型。 - 企业版引入UDT,允许自定义数据转换。 - 新增Oracle和SQL Server数据接入。 - 数据同步优化,支持压缩,提升元数据同步速度,错误信息细化,支持表名修改。 - 扩展跨平台支持,包括麒麟、Euler、Anolis OS等。
117 0
|
5天前
|
存储 安全 关系型数据库
2024 Mysql基础与进阶操作系列之MySQL触发器详解(21)作者——LJS[你个小黑子这都还学不会嘛?你是真爱粉嘛?真是的 ~;以后请别侮辱我家鸽鸽]
MySQL触发器的使用场景之数据完整性约束、如何具体创建person的日志表、触发器与存储过程的对比与选择、触发器的性能和注意事项等具体操作详解步骤;举例说明、注意点及常见报错问题所对应的解决方法
|
5月前
|
存储 SQL 关系型数据库
MySQL 进阶使用【函数、索引、视图、存储过程、存储函数、触发器】(2)
MySQL 进阶使用【函数、索引、视图、存储过程、存储函数、触发器】
|
3月前
|
存储 关系型数据库 MySQL
MySQL 中的触发器数量之谜
【8月更文挑战第31天】
36 0

推荐镜像

更多