一、创建一个简单的触发器
CREATE TRIGGER 触发器名称
ON 表名
FOR INSERT、UPDATE 或 DELETE
AS
T-SQL 语句
注意:触发器名称是不加引号的。
二、删除触发器
drop trigger 触发器名称
删除多个触发器:drop trigger 触发器名称,触发器名称
三、重命名触发器
用查询分析器重命名
exec sp_rename 原名称, 新名称
sp_rename 是 SQL Server? 自带的一个存储过程,用于更改当前数据库中用户创建的对象的名称,如表名、列表、索引名等。
四、INSERT、UPDATE 或 DELETE
INSTEAD OF
执行触发器语句,但不执行触发触发器的 SQL 语句,比如试图删除一条记录时,将执行触发器指定的语句,此时不再执行 delete 语句。例:
create trigger f
on tbl
instead of delete
as
insert into Logs...
IF UPDATE(列名)
检查是否更新了某一列,用于 insert 或 update,不能用于 delete。例:
create trigger f
on tbl
for update
as
if update(status) or update(title)
sql_statement --更新了 status 或 title 列
inserted、deleted
这是两个虚拟表,inserted 保存的是 insert 或 update 之后所影响的记录形成的表,deleted 保存的是 delete 或 update 之前所影响的记录形成的表。例:
create trigger tbl_delete
on tbl
for delete
as
declare @title varchar(200)
select @title=title from deleted
insert into Logs(logContent) values('删除了 title 为:' + title + '的记录')
说明:如果向 inserted 或 deleted 虚拟表中取字段类型为 text、image 的字段值时,所取得的值将会是 null。
五、查看数据库中所有的触发器
use 数据库名
go
select * from sysobjects where xtype='TR'
sysobjects 保存着数据库的对象,其中 xtype 为 TR 的记录即为触发器对象。在 name 一列,我们可以看到触发器名称。
六、sp_helptext 查看触发器内容
use 数据库名
go
exec sp_helptext '触发器名称'
七、sp_helptrigger 用于查看触发器的属性
sp_helptrigger 有两个参数:第一个参数为表名;第二个为触发器类型,为 char(6) 类型,可以是 INSERT、UPDATE、DELETE,如果省略则显示指定表中所有类型触发器的属性。
例:
use 数据库名
go
exec sp_helptrigger tbl
八、递归、嵌套触发器
递归分两种,间接递归和直接递归。我们举例解释如下,假如有表1、表2名称分别为 T1、T2,在 T1、T2 上分别有触发器 G1、G2。
间接递归:对 T1 操作从而触发 G1,G1 对 T2 操作从而触发 G2,G2 对 T1 操作从而再次触发 G1...
直接递归:对 T1 操作从而触发 G1,G1 对 T1 操作从而再次触发 G1... 
嵌套触发器
类似于间接递归,间接递归必然要形成一个环,而嵌套触发器不一定要形成一个环,它可以 T1->T2->T3...这样一直触发下去,最多允许嵌套 32 层。
设置直接递归
默认情况下是禁止直接递归的,要设置为允许有两种方法:
T-SQL:exec sp_dboption 'dbName', 'recursive triggers', true
EM:数据库上点右键->属性->选项。 
设置间接递归、嵌套
默认情况下是允许间接递归、嵌套的,要设置为禁止有两种方法:
T-SQL:exec sp_configure 'nested triggers', 0 --第二个参数为 1 则为允许
EM:注册上点右键->属性->服务器设置。 
九、触发器回滚
我们看到许多注册系统在注册后都不能更改用户名,但这多半是由应用程序决定的, 如果直接打开数据库表进行更改,同样可以更改其用户名,在触发器中利用回滚就可以巧妙地实现无法更改用户名。
use 数据库名
go
create trigger tr
on 表名
for update
as
if update(userName)
rollback tran
关键在最后两句,其解释为:如果更新了 userName 列,就回滚事务。
十、禁用、启用触发器
禁用:alter table 表名 disable trigger 触发器名称
启用:alter table 表名 enable trigger 触发器名称
如果有多个触发器,则各个触发器名称之间用英文逗号隔开。
如果把“触发器名称”换成“ALL”,则表示禁用或启用该表的全部触发器。
十一、判断插入修改删除
create TRIGGER [updatetest] ON [dbo].[TEST]
FOR INSERT, UPDATE, DELETE
AS
beginDECLARE@IsInsert bit,@IsUpdate bit,@IsDelete bitIF EXISTS(SELECT 1 FROM inserted) AND NOT EXISTS(SELECT 1 FROM deleted)SET @IsInsert = 1ELSESET @IsInsert = 0IF EXISTS(SELECT 1 FROM inserted) AND EXISTS(SELECT 1 FROM deleted)SET @IsUpdate = 1ELSESET @IsUpdate = 0IF NOT EXISTS(SELECT 1 FROM inserted) AND EXISTS(SELECT 1 FROM deleted)SET @IsDelete = 1ELSESET @IsDelete = 0 if (@IsUpdate=1)PRINT 'updated 'if (@IsInsert=1)PRINT 'insert 'if (@IsDelete=1)PRINT 'delete '
end

转载于:https://www.cnblogs.com/lgx5/p/9390723.html

SQL触发器 常用语句相关推荐

  1. 【白帽子学习笔记14】SQL注入常用语句

    [白帽子学习笔记14]SQL注入常用语句 目前网站中使用的最多的数据库要算是 ACCESS.SQL Server(MSSQL).MySQL 这三个了,所以这里的手工注入,我就以他们三个数据库来分成三 ...

  2. SQL Server常用语句

    目录 1.数据库管理语句 2.表管理语句 3.索引管理语句 4.默认值管理语句 5.规则管理语句 6.数据查询语句 7.视图管理语句 8.触发器管理语句 9.存储过程管理语句 10.游标管理语句 11 ...

  3. SQL数据库常用语句大全

    cmd环境下开启关闭数据库 以管理员身份运行命令提示符环境,启动数据库服务(其中MySQL57为数据库服务名,查找方法:右键我的电脑->管理->服务,):net start MySQL57 ...

  4. SQLserver中触发器常用语句

    1创建触发器 create trigger 触发器名称 on 表名 for delete,update,insert --触发条件可多选或单选 asT-SQL语句 2删除触发器 drop trigge ...

  5. SQL Sever 常用语句总结

    SQL语句先前写的时候,很容易把一些特殊的用法忘记,我特此整理了一下SQL语句操作. 一.基础 1.说明:创建数据库 CREATE DATABASE database-name (数据库名称) 2.说 ...

  6. 7张图大总结:SQL 数据分析常用语句!

    "今天给大家分享一波SQL的基础查询语句,不管是数据分析小白还是在恶补基础知识的数据分析师,都快来学一学吧!   来源:InfoQ" 本文目录: 基础查询 字符串\数字\日期时间 ...

  7. sql server2005 常用语句

    本人初学者时用 创建一个库为study create database study 创建一个学生信息表 create table 学生信息表 (姓名 char(10) not null, 学号 cha ...

  8. SQL 数据分析常用语句

    1 基础查询 • 2 字符串数字日期时间 • 3 聚合数据查询 • 4 子查询 • 5 联接组合查询 • 6 高级查询 • 7 更新数据 阅读提醒:点击图片放大可看清晰的 1 基础查询 2 字符串数字 ...

  9. sql server 常用语句

    1.数据库压缩日志 GO ALTER DATABASE website SET RECOVERY SIMPLE;--设置简单恢复模式 GO DBCC SHRINKFILE (website_Log, ...

最新文章

  1. 【学习笔记】和式(《具体数学》第二章)
  2. mongodb 压缩——3.0+支持zlib和snappy
  3. Windows 10四大版本官方对比:国人肯定专业版
  4. golang中string长度
  5. 2.18比赛(T2,T3留坑)
  6. Java里的并发容器与安全共享策略总结
  7. 社工必备查询网址汇总
  8. java 类中 serialversionuid 作用
  9. 拼音加加符号编码列表
  10. 电阻电容串联并联关系,一辈子受益
  11. 《高性能MySQL》读书笔记(1~6章)
  12. 恒生电子 java笔试_恒生电子笔试题
  13. Redis 缓存清理策略
  14. vue中清除路由缓存
  15. Springboot毕设项目电子竞技赛事管理系统f1v55java+VUE+Mybatis+Maven+Mysql+sprnig)
  16. C语言 模拟按键操作
  17. 【开发随记】【提效】工作习惯那些事系列之二——TOP3
  18. 更新KB5005565补丁后win10局域网打印机不能共享打印
  19. 2021网刃杯CTF ez-sql
  20. terminal命令下安装python_Windows Terminal-Windows Terminal命令行安装包下载 官方最新版 - 安下载...

热门文章

  1. 理解location对象
  2. 2021重庆对口高职高考成绩查询,重庆市2021年高职分类考试成绩明日放榜
  3. 山东科技大学计算机网络_山东科技大学计算机网络共20讲视频
  4. python比较数据工具_Python模拟数据工具哪些比较好用
  5. Python提示ModuleNotFoundError: No module named ‘PIL‘,已解决
  6. 安装MYSQL的思考与分析_mysql安装和基本使用
  7. matlab 去掉矩阵中某些元素,怎么修改矩阵中的某些元素 或者简单点说保留矩阵中的元素...
  8. 20220213:力扣第280场周赛(上)
  9. 20200727:力扣第31周双周赛题解
  10. mysql sql时间比较_mysql和sql时间 字段比较大小的问题