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 中的触发器相关推荐

  1. java触发器如何创建表_在java 中执行触发器代码、创表语句

    由于程序的需要,在SQLServer 中创建触发器及建表,碰到了在java 代码中执行创建触发器及表. /**建立中间表*/ public static final String createMidd ...

  2. SQLserver中触发器常用语句

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

  3. oracle中创建触发器

    从csdn上面看到一个如何创建触发器的问题,感觉自己很有必要保存学习,特写下来: 条件: 现有A.B两张表 A: 工号 姓名 密码 性别 年龄 ... B: 工号 姓名 密码 当对A表中的" ...

  4. 关于Sqlserver中 BCP命令,实现数据导出功能。

    关于Sqlserver中 BCP命令,实现数据导出功能. exec master..xp_cmdshell 'bcp "select 账号 ,姓名, 账号 from datat.dbo.个人 ...

  5. SqlServer基础之(触发器)

    概念:   触发器(trigger)是SQL server 提供给程序员和数据分析员来保证数据完整性的一种方法,它是与表事件相关的特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件来触 ...

  6. (转)SqlServer基础之(触发器)(清晰易懂)

    阅读目录 一:触发器的优点 二:触发器的作用 三:触发器的分类 四:触发器的工作原理 五:创建触发器 六:管理触发器 概念:   触发器(trigger)是SQL server 提供给程序员和数据分析 ...

  7. 简单介绍SQLserver中的declare变量用法

    这篇文章主要介绍了SQLserver中的declare变量用法,sql中declare是声明的意思,就是声明变量的,这个一般是用在函数和存储过程中的.感兴趣的可以来了解一下 平时写SQL查询.存储过程 ...

  8. sqlserver中能用when_sqlserver中if语句顶替when.case.语句

    sqlserver中if语句替代when...case..语句 create table Employees ( EmployeeID char(6) primary key not null, Na ...

  9. SQLSERVER中统计所有表的记录数

    SQLSERVER中统计所有表的记录数 利用系统索引表sysindexes中索引ID indid<1的行中的rows列存有该表的行数这一特点.    方法是利用隐藏未公开的系统存储过程sp_MS ...

最新文章

  1. go kegg_3分钟了解GO/KEGG功能富集分析
  2. 讨论UML概念和模型UML九种图。
  3. ACM中java的使用 (转)
  4. 用户控件如何控制ASPX页面的控件
  5. JS基础语法(04)-逗号运算符
  6. ABAP Netweaver和git的快捷方式
  7. 前端学习(706):do-while案例
  8. LeetCode 589. N叉树的前序遍历(前序遍历)
  9. Java虚拟机(四)——类加载机制
  10. LeetCode(344)——反转字符串(JavaScript)
  11. python判断字符串出现的次数_【如何判断python字符串出现次数?这几种方法你一定要学会】- 环球网校...
  12. html java 安卓_用Html进行Android开发-Fun言
  13. 一本通1665【例 3】移棋子游戏
  14. ubuntu linux修改ip地址命令,永久修改ubuntu系统MAC和IP地址的方法命令
  15. easyui获取图片路径_Easyui filebox(文件框)_EasyUI 插件
  16. css背景图片全屏_使用CSS3的全屏背景图片幻灯片
  17. 获取手机唯一标识插件_H5能获取到手机设备ID或者手机浏览器唯一识别码吗
  18. 你为什么错过优质信息?
  19. <Leetcode>算法初步(回顾)
  20. 设计模式之工厂模式(factory pattern)

热门文章

  1. 【Stable Diffusion | AI 绘画】手把手教你体验--AI 生成唯美二次元
  2. 《勋伯格和声学》读书笔记(十三):在调性的边缘(对减七和弦和增七和弦及其转位和弦的进一步观察)
  3. 第三方推送(小米华为友盟)接入实践
  4. ST-Link V2驱动下载:
  5. 盘点 DevOps 世界的杰出女性(一)
  6. Android控件TextView实现静态图与动态GIF图文混排
  7. css3实现向一个方向无缝连接滚动
  8. 如何实现安全密码历史记录
  9. 导出iphone手机安装包的几种方法
  10. google translate 插件修改可用地址