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/UPDATED/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

  更新的触发器

CREATE   TRIGGER [DBO].[TRG_TESTTABLE_UPDATE] ON [DBO].[TESTTABLE] AFTER UPDATE AS
BEGIN

INSERT INTO HTESTTABLE
SELECT U.NAME + ‘UPDATE‘,GETDATE(),GETDATE()
FROM UPDATED U 

END

删除的触发器

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

原文地址:https://www.cnblogs.com/qianjinyan/p/10330717.html

时间: 2024-10-15 22:56:51

SqlServer 中的触发器的相关文章

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

Sqlserver中存储过程,触发器,自定义函数 1.存储过程有关内容存储过程的定义:存储过程的分类:存储过程的创建,修改,执行:存储过程中参数的传递,返回与接收:存储过程的返回值:存储过程使用游标. 1.1存储过程的定义:存放在服务器上预先编译好的sql语句,可以给存储过程传递参数,也可以从存储过程返回值. 优点:提供了安全访问机制,比如可以将不同的存储过程的执行权限赋予权限不同的用户:改进了执行性能,因为存储过程是预编译的:减少了网络流量,因为在调用存储过程时,传递的字符串很短,没有很长的s

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

Sqlserver中存储过程,触发器,自定义函数: 自定义函数:1.函数类型:2.函数的参数和返回值: 1.函数类型:标量值函数,返回的是一个标量值表值函数:内联表值函数:多语句表值函数. 标量值函数: 1 go 2 create function SumOrders(@职工号 varchar(20))--指定参数名,和返回类型 stuNo 3 returns int --指定返回类型 4 begin 5 declare @订单总数 int --学生人数sumstudent 6 select @

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

Sqlserver中存储过程,触发器,自定义函数: 1. 触发器:是针对数据库表或数据库的特殊存储过程,在某些行为发生的时候就会被激活 触发器的分类: DML触发器:发生在数据操作语言执行时触发执行的存储过程,Insert,Update,Delete After触发器:记录被改变之后激活执行 Instead of触发器:记录被改变之前激活执行. DDL触发器:响应数据定义语言执行时触发执行的存储过程,一般用于执行数据库中的管理任务 审核和规范数据库的操作: 防止数据表结构被更改或删除 2. ht

SQLSERVER中返回修改后的数据

在公司看到同事写了个SQL2005的新特性的文章,觉得很实用,在这里和大家分享下. 这种技术主要是用到了inserted和deleted虚拟表,这两张表相信大家都很熟悉.以前我们主要是在触发器中使用. 我们先来复习下这两个表: Inserted和Deleted这两个表是逻辑表,并且这两个表是由系统管理的,存储在内存中,不是存储在数据库中,因此,不允许用户直接对其修改.这两个表的结构与被该触发器作用的表在相同的表结构.这两个表是动态驻留在内存中的,当触发器工作完成,它们也被删除. 接下来,看看我们

用表来管理SQLServer中的扩展属性(描述)

数据字典是个好东东,对于开发.维护非常重要. 但Sql Server中写描述确实不方便,如何化繁为简.批量地增加修改扩展属性呢? 增加2个表和5个存储过程.2个触发器.1个表值函数就好了. 把下面的SQL执行一遍生成相关的对象, 然后执行一下: 1. EXEC Proc_Util_Desc_GetColumnNameToDescTable , 生成表的描述对应记录 2. EXEC Proc_Util_Desc_GetTableNameToDescTable, 生成列的描述对应记录 3. 查看,

Sqlserver 中系统表sysobjects、syscolumns以及函数object_id

1.sysobjects 系统对象表. 保存当前数据库的对象,如约束.默认值.日志.规则.存储过程等 sysobjects 重要字段解释: sysObjects ( Name sysname, --object 名称 id int, --object id xtype char(2), -- object 类型 type char(2), -- Object 类型(与xtype 似乎一模一样) uid smallint, -- object 所有者的ID ... --其他的字段不常用到. ) ?

sqlserver中select造成死锁

项目上线,准备验收前出现了一个严重的问题:很多select语句作为死锁的牺牲,大部分报表无法打开.这个问题影响范围很大所有的报表都无法访问,而我们的报表是放在电视上面轮播的,电视放在工厂里面,所以出现问题后,整个工厂都知道了. 解决这个问题比较曲折,首先是写SAP接口的同事发现了问题:SAP一直在传错误数据导致产量表被锁住.修改SAP传输的错误数据后,这个死锁的问题没有出现了.但是我查看生产环境服务器日志的时候,发现这个问题依然存在,由于客户没有提这个问题,我也就是没有理由要求花时间修改了,因为

mysql中的触发器和事务的操作

触发器 语法 创建触发器: CREATE TRIGGER trigger_name trigger_time trigger_event ON tbl_name FOR EACH ROW trigger_stmt; trigger_time是触发程序的动作时间.它可以是BEFORE或AFTER trigger_event指明了激活触发程序的语句的类型. trigger_event可以是下述值之一: ·             INSERT:将新行插入表时激活触发程序,例如,通过INSERT.LO

SQLServer中间接实现函数索引或者Hash索引

本文出处:http://www.cnblogs.com/wy123/p/6617700.html SQLServer中没有函数索引,在某些场景下查询的时候要根据字段的某一部分做查询或者经过某种计算之后做查询,如果使用函数或者其他方式作用在字段上之后,就会限制到索引的使用,不过我们可以间接地实现类似于函数索引的功能.另外一个就是如果查询字段较大或者字段较多的时候,所建立的索引就显得有点笨重,效率也不高,就需要考虑使用一个较小的"替代性"字段做等价替换,类似于Hash索引,本文粗浅地介绍两