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
BEGIN INSERT 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
BEGIN INSERT 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
BEGIN INSERT INTO HTESTTABLE
SELECT D.NAME + 'DELETE',GETDATE(),GETDATE()
FROM DELETED D END

 

 

如果需要对触发器重命名,只要记住触发器是特殊的存储过程即可,命令如下

exec sp_rename oldxxx, newxxx

如何查询触发器

SELECT * FROM SYSOBJECTS WHERE XTYPE='TR'

禁用:alter table 表名 disable trigger 触发器名称
启用:alter table 表名 enable trigger 触发器名称

SqlServer 中的触发器的更多相关文章

  1. Sqlserver中的触发器

    一 什么是触发器 1.1  触发器的概念   触发器(trigger)是SQL server来保证数据完整性的一种方法,它是与表事件相关的特殊的存储过程,它的执行是由事件来触发,当对一个表进行操作(  ...

  2. 知方可补不足~sqlserver中触发器的使用

    回到目录 触发器在过去的10年中,即存储过程和ado.net称霸江湖期间是那么的重要,而现在,trigger显得不是那么必要的,我们很少将复杂的业务写在SQL里,当然也会没有机会写到trigger里了 ...

  3. Sqlserver中存储过程,触发器,自定义函数(二)

    Sqlserver中存储过程,触发器,自定义函数: 自定义函数:1.函数类型:2.函数的参数和返回值: 1.函数类型:标量值函数,返回的是一个标量值表值函数:内联表值函数:多语句表值函数. 标量值函数 ...

  4. Sqlserver中存储过程,触发器,自定义函数(一)

    Sqlserver中存储过程,触发器,自定义函数 1.存储过程有关内容存储过程的定义:存储过程的分类:存储过程的创建,修改,执行:存储过程中参数的传递,返回与接收:存储过程的返回值:存储过程使用游标. ...

  5. Sqlserver中存储过程,触发器,自定义函数

    Sqlserver中存储过程,触发器,自定义函数: 1. 触发器:是针对数据库表或数据库的特殊存储过程,在某些行为发生的时候就会被激活 触发器的分类: DML触发器:发生在数据操作语言执行时触发执行的 ...

  6. C#批量插入数据到Sqlserver中的四种方式

    我的新书ASP.NET MVC企业级实战预计明年2月份出版,感谢大家关注! 本篇,我将来讲解一下在Sqlserver中批量插入数据. 先创建一个用来测试的数据库和表,为了让插入数据更快,表中主键采用的 ...

  7. SQLSERVER中的假脱机spool

    SQLSERVER中的假脱机spool 我发现网上对于假脱机的解释都非常零散,究竟假脱机是什么? 这几天在家里研究了一下,收集了很多网上的资料 假脱机是中文的翻译,而英文的名字叫做 spool 在徐老 ...

  8. SqlServer基础之(触发器)

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

  9. (转)笔记320 SQLSERVER中的加密函数 2013-7-11

    1 --SQLSERVER中的加密函数 2013-7-11 2 ENCRYPTBYASYMKEY() --非对称密钥 3 ENCRYPTBYCERT() --证书加密 4 ENCRYPTBYKEY() ...

随机推荐

  1. mysql备份与恢复-xtracebackup

    因为percona打算放弃使用innobackupex备份工具,因此我们这里也说明一下innobackupex的兄弟工具xtraceback工具的使用 这个工具的安装可以参考上面的一些博文,上面详细说 ...

  2. Prometheus监控学习笔记之解读prometheus监控kubernetes的配置文件

    0x00 概述 Prometheus 是一个开源和社区驱动的监控&报警&时序数据库的项目.来源于谷歌BorgMon项目.现在最常见的Kubernetes容器管理系统中,通常会搭配Pro ...

  3. 9i时候的块

    Header (Common and Variable) The header contains general block information, such as the block addres ...

  4. P2044 [NOI2012]随机数生成器

    洛咕原题 正常的矩乘题. 但是,计算过程中会爆long long. 所以,我们要用快速(龟速)乘来解决. 快速乘,也就是把快速幂稍作修改.乘法被分成若干个加法,以时间为代价解决精度问题. #inclu ...

  5. gdb远程debug A syntax error in expression, near `variable)'.

    今天调试有个linux环境的应用时,gdb提示A syntax error in expression, near `variable)'.,最后经查,gdb版本过低(比如7.2)或者源代码不匹配所致 ...

  6. uml类图和er图中主外键的表示区别

    在er图也就是数据库中,无论是mysql/oracle都是从表引用主表的pk作为外键. 而在uml类图表示法中,他们的顺序则刚好相反,从主对象导向到子对象,如下: 主体是资金借款方,征信信息和资金借款 ...

  7. Python爬虫(二)——豆瓣图书决策树构建

    前文参考:  https://www.cnblogs.com/LexMoon/p/douban1.html Matplotlib绘制决策树代码: # coding=utf-8 import matpl ...

  8. Windows死机的话,可能的一些猫病

    一.由硬件引起的原因 [散热不良] 显示器.电源和CPU在工作中发热量非常大,因此保持良好的通风状况非常重要,如果显示器过热将会导致色彩.图象失真甚至缩短显示器寿命.工作时间太长也会导致电源或显示器散 ...

  9. Atlas读写分离[高可用]

    Atlas下载地址: https://github.com/Qihoo360/Atlas/releases Atlas是出于360的, 比mysql-proxy更稳定, 部署起来更方便. 环境: pr ...

  10. 20145326蔡馨熤《网络对抗》——MSF基础应用

    20145326蔡馨熤<网络对抗>——MSF基础应用 实验后回答问题 用自己的话解释什么是exploit,payload,encode. exploit:起运输的作用,将数据传输到对方主机 ...