SqlServer 中的触发器
SqlServer 触发器实现多表之间同步增加、删除与更新
定义: 何为触发器?在SQL Server里面也就是对某一个表的一定的操作,触发某种条件,从而执行的一段程序。触发器是一个特殊的存储过程。
常见的触发器有三种:分别应用于Insert , Update , Delete 事件。
触发器的使用模版如下
CREATE TRIGGER 触发器名称
ON 表名称
AFTER INSERT /UPDATE/DELETE
AS BEGIN INSERT INTO
B表(B表字段1,B表字段2,B表字段3)
SELECT A表字段1,A表字段2,A表字段3
FROM INSERTED/DELETED
END
新建两张表,如下,第一张是操作表,第二张表是为了测试触发器效果的
create table dbo.testtable(
id int identity (1,1),
name varchar(20))create table dbo.htesttable(
id int identity (1,1),
name varchar(20),
timerecord datetime,
updatedt datetime)
新增的触发器
CREATE TRIGGER [DBO].[TRG_TESTTABLE_INSERT] ON [DBO].[TESTTABLE] AFTER INSERT AS
BEGININSERT INTO HTESTTABLE
SELECT I.NAME+'INSERT' ,GETDATE(),GETDATE()
FROM INSERTED I END
更新的触发器
ALTER/Create TRIGGER [dbo].[TRG_TESTTABLE_update] ON [dbo].[testtable] AFTER update AS
BEGININSERT INTO HTESTTABLE
SELECT I.NAME + 'update',getdate(),getdate()
FROM deleted I INSERT INTO HTESTTABLE
SELECT I.NAME + 'update2',getdate(),getdate()FROM inserted I END
解释:
在删除(delete)数据的时候,可以假定数据库将要删除的数据放到一个deleted临时表中,我们可以向读取普通的表一样,select 字段 from deleted
而insert的时候道理一样,只不过是把要插入的数据放在inserted表中。
更新操作可以认为是执行了两个操作,先把那一行记录delete掉,然后再insert,
这样update操作实际上就对deleted表和inserted表的操作,所以不会有updated表了;
有的时候两个表是主外键关系,想删除主表数据的同时把子表相关的数据也删除,
这个时候如果用触发器就没有效果了,因为这个触发器是在你删除表后才触发的,
这个时候直接终止,提示“有主外键关系,不能删除等”,所有这样的删除触发器是没有效果的
删除的触发器
CREATE TRIGGER [DBO].[TRG_TESTTABLE_DELETE] ON [DBO].[TESTTABLE] AFTER DELETE AS
BEGININSERT INTO HTESTTABLE
SELECT D.NAME + 'DELETE',GETDATE(),GETDATE()
FROM DELETED DEND
如果需要对触发器重命名,只要记住触发器是特殊的存储过程即可,命令如下
exec sp_rename oldxxx, newxxx
如何查询触发器
SELECT * FROM SYSOBJECTS WHERE XTYPE='TR'
禁用:alter table 表名 disable trigger 触发器名称
启用:alter table 表名 enable trigger 触发器名称
转载于:https://www.cnblogs.com/qianjinyan/p/10330717.html
SqlServer 中的触发器相关推荐
- java触发器如何创建表_在java 中执行触发器代码、创表语句
由于程序的需要,在SQLServer 中创建触发器及建表,碰到了在java 代码中执行创建触发器及表. /**建立中间表*/ public static final String createMidd ...
- SQLserver中触发器常用语句
1创建触发器 create trigger 触发器名称 on 表名 for delete,update,insert --触发条件可多选或单选 asT-SQL语句 2删除触发器 drop trigge ...
- oracle中创建触发器
从csdn上面看到一个如何创建触发器的问题,感觉自己很有必要保存学习,特写下来: 条件: 现有A.B两张表 A: 工号 姓名 密码 性别 年龄 ... B: 工号 姓名 密码 当对A表中的" ...
- 关于Sqlserver中 BCP命令,实现数据导出功能。
关于Sqlserver中 BCP命令,实现数据导出功能. exec master..xp_cmdshell 'bcp "select 账号 ,姓名, 账号 from datat.dbo.个人 ...
- SqlServer基础之(触发器)
概念: 触发器(trigger)是SQL server 提供给程序员和数据分析员来保证数据完整性的一种方法,它是与表事件相关的特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件来触 ...
- (转)SqlServer基础之(触发器)(清晰易懂)
阅读目录 一:触发器的优点 二:触发器的作用 三:触发器的分类 四:触发器的工作原理 五:创建触发器 六:管理触发器 概念: 触发器(trigger)是SQL server 提供给程序员和数据分析 ...
- 简单介绍SQLserver中的declare变量用法
这篇文章主要介绍了SQLserver中的declare变量用法,sql中declare是声明的意思,就是声明变量的,这个一般是用在函数和存储过程中的.感兴趣的可以来了解一下 平时写SQL查询.存储过程 ...
- sqlserver中能用when_sqlserver中if语句顶替when.case.语句
sqlserver中if语句替代when...case..语句 create table Employees ( EmployeeID char(6) primary key not null, Na ...
- SQLSERVER中统计所有表的记录数
SQLSERVER中统计所有表的记录数 利用系统索引表sysindexes中索引ID indid<1的行中的rows列存有该表的行数这一特点. 方法是利用隐藏未公开的系统存储过程sp_MS ...
最新文章
- go kegg_3分钟了解GO/KEGG功能富集分析
- 讨论UML概念和模型UML九种图。
- ACM中java的使用 (转)
- 用户控件如何控制ASPX页面的控件
- JS基础语法(04)-逗号运算符
- ABAP Netweaver和git的快捷方式
- 前端学习(706):do-while案例
- LeetCode 589. N叉树的前序遍历(前序遍历)
- Java虚拟机(四)——类加载机制
- LeetCode(344)——反转字符串(JavaScript)
- python判断字符串出现的次数_【如何判断python字符串出现次数?这几种方法你一定要学会】- 环球网校...
- html java 安卓_用Html进行Android开发-Fun言
- 一本通1665【例 3】移棋子游戏
- ubuntu linux修改ip地址命令,永久修改ubuntu系统MAC和IP地址的方法命令
- easyui获取图片路径_Easyui filebox(文件框)_EasyUI 插件
- css背景图片全屏_使用CSS3的全屏背景图片幻灯片
- 获取手机唯一标识插件_H5能获取到手机设备ID或者手机浏览器唯一识别码吗
- 你为什么错过优质信息?
- <Leetcode>算法初步(回顾)
- 设计模式之工厂模式(factory pattern)