千家信息网

sqlserver 中怎么实现触发器

发表于:2024-11-23 作者:千家信息网编辑
千家信息网最后更新 2024年11月23日,sqlserver 中怎么实现触发器,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。总结常用基本点如下:1、触发器有两种类型:数据定义
千家信息网最后更新 2024年11月23日sqlserver 中怎么实现触发器

sqlserver 中怎么实现触发器,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

总结常用基本点如下:

1、触发器有两种类型:数据定义语言触发器(DDL触发器)和数据操纵语言触发器(DML触发器)。   DDL触发器:在用户对数据库执行数据定义(CREATE、ALTER、DROP或相似的语句)对数据库结构进行修改时激活而做出响应。   DML触发器:在用户对数据库执行数据操作时发生,触发器中的代码会被自动调用。

2、DML触发器分类:Insert触发器、Delete触发器、Update触发器、上面任意类型混合。

3、触发器创建语法:复制代码 代码如下: CREATE TRIGGER ON

{{{FOR|AFTER} <[INSERT] [,] [UPDATE],[DELETE]>}|INSTEAN OF} AS

4、触发器必须附加到表或视图上,触发器不能单独存在。AFTER或FOR触发器不支持视图,INSTEAD OF支持表或视图。

5、INSERT触发器中,SQL Server 会创建一个插入行的副本,并把该副本插入到一个特殊表Insert表中,该表只在触发器作用域内存在。

6、DELETE触发器中,SQL Server 会创建一个删除行的副本,并把该副本插入到一个特殊表Delete表中,该表只在触发器作用域内存在。

7、UPDATE触发器中,SQL Server认为更新的记录是删除了现有的记录,插入更新后的新纪录,所以UPDATE触发器中包含Insert和Delete两个特殊表,也是只存在触发器作用域内,这两个表的行数完全一样。

8、触发器尽可能简短,因为触发器和触发器内的语句被一同处理,即直到语句执行完成才算是触发器完成。如果代码很长那触发器运行时间就会很长。 下面是个实现自动编号功能的例子:复制代码 代码如下: --有两张表,客户表和项目表,要求:新建项目时自动生成项目编号,每个不同的客户的项目的编号从1开始 --项目编号格式为PJ+"-"+"客户编号"+"-"+"日期"+"-"+"流水号" --如项目编号:PJ-ABCD-120805-0001 create table testAccount --创建测试客户表 ( tAccName nvarchar(100), --客户姓名 tAccId nvarchar(32) --客户编号 ) create table testProject --创建测试项目表 ( tProName nvarchar(100), --项目名称 tProId nvarchar(32), --项目编号 tIdAcc nvarchar(100), --客户编号 tProGuid nvarchar(64) --guid ) go create trigger T_AutoNumber on testProject after insert as begin declare @one nvarchar(8), --编号第一部分,PJ @two nvarchar(32), --编号第二部分,客户编号 @three nvarchar(8), --编号第三部分,日期 @four int, --编号第四部分,流水号 @guid nvarchar(64) --guid set @one='PJ' set @three= convert( varchar(8),GETDATE(),112) --从Inserted副本表里获取当前插入数据的客户编码和guid select @two=tIdAcc,@guid=tProGuid from Inserted --获取编号最后四位 select @four=max(cast(right(tProId,4)as int)) from testProject where tIdAcc=@two --对每一个新客户的流水号都是从1开始,已存在客户为最大流水号加1 if @four is null set @four=0 else set @four=cast(@four as int) set @four=@four+1 update testProject set tProId=@one+'-'+@two+'-'+@three+'-'+right('0000'+cast(@four as varchar),4) where tProGuid=@guid end go --生成测试表数据 insert into testAccount values ('小小鸭有限公司','XXYGS') insert into testAccount values ('丑小鸭有限公司','CXY') insert into testProject (tProName,tIdAcc,tProGuid)values ('小鸭成长项目','XXYGS',newid()) insert into testProject (tProName,tIdAcc,tProGuid)values ('小鸭学游泳项目','XXYGS',newid()) insert into testProject (tProName,tIdAcc,tProGuid)values ('丑小鸭成长项目','CXY',newid()) select * from testProject drop table testAccount drop table testProject

9.调试触发器:新建查询窗口,输入下来代码,按下F11即可逐语句运行下列脚本,进入到触发器中。也可在触发器里设置断点,然后按F11逐语句执行。复制代码 代码如下: begin tran insert into testProject (tProName,tIdAcc,tProGuid)values ('小鸭成长项目','XXYGS',newid()) insert into testProject (tProName,tIdAcc,tProGuid)values ('小鸭学游泳项目','XXYGS',newid()) insert into testProject (tProName,tIdAcc,tProGuid)values ('丑小鸭成长项目','CXY',newid()) if @@TRANCOUNT>0 rollback tran

关于sqlserver 中怎么实现触发器问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注行业资讯频道了解更多相关知识。

触发器 项目 客户 代码 数据 副本 语句 小鸭 流水 流水号 特殊 丑小鸭 作用 数据库 视图 问题 测试 两个 会创 公司 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 操作数据库神器下载 汤姆森数据库 如果在淘宝查行业数据库 苏州龙明软件开发有限公司 软件开发过程分为几个级别 孝感功能齐全的计算机软件开发 北京量化积分管理软件开发电话 矩阵服务器配置价格 提高网络安全防范意识课件 保护家庭网络安全的软件 助理网络安全工程师报名时间 四川荣涵网络技术公司 天融信网络安全态势感知系统 使用哪个数据库 平度商城软件开发哪家便宜 数据库 菜鸟教程 网络安全产业联盟优秀会员 i7处理器可以装到服务器上吗 联盟服务器连接失败 福州外语外贸学院正式数据库 中国未成年人数据库 sql数据库备份方法有几种 中国ai服务器总量 软件开发都是开发啥 软件开发需求调研过程 河北文档软件开发诚信企业 餐饮行业研究报告数据库 派出所加强网络安全培训 知网数据库论文查询入口核心期刊 交通银行软件开发岗位笔试难吗
0