sqlserver的表触发器和定时器
来源:互联网 发布:java线程是什么意思 编辑:程序博客网 时间:2024/06/03 12:23
上次弄了定时器,没有把方法记下来,结果今天又折腾了好几个小时,赶快把方法记下来,别再忘了。
表触发器就是当表内数据发生变化时,会自动触发代码。
创建方式为:
在manager studio找到要建触发器的表,在表下面的【触发器】文件夹上点右键,选择新建。如图:
打开后,sqlserver会将大量的代码为你生成,只需要关心自己要修改的部分。
也就是如下部分:
CREATE TRIGGER <Schema_Name, sysname, Schema_Name>.<Trigger_Name, sysname, Trigger_Name> ON <Schema_Name, sysname, Schema_Name>.<Table_Name, sysname, Table_Name> AFTER <Data_Modification_Statements, , INSERT,DELETE,UPDATE>AS BEGIN-- SET NOCOUNT ON added to prevent extra result sets from-- interfering with SELECT statements.SET NOCOUNT ON; -- Insert statements for trigger hereEND
CREATE TRIGGER后面是自己定义的触发器名称,ON后面写表名称,AFTER后面填事件,已经给了选项:INSERT,DELETE,UPDATE。
在选择的事件发生后,需要触发的代码写在-- Insert statements for trigger here的下面。
写完后执行,触发器就生成了。
但是有个问题,通常我们不仅需要知道表数据发生了变化,我们还需要知道是哪些数据发生了变化。
触发器是利用了表数据发生变化时,自动生成的两个虚拟表,一个是inserted,一个是deleted,这两个虚拟表从其他地方是检索不到的,只有触发器能读到。
当数据发生变化时,如果是新插入数据,则该数据会在inserted里面暂时保存。而删除一条数据时,则会在deleted里面暂时保存。更新则等于先删除再插入,也就是deleted里面存更新前,inserted里面存更新后。这些数据会在触发器执行完成后消失。
这样我们需要的数据只要从inserted和deleted里面读取到就可以了。
完整的例子如下:
USE [db]GO/****** 对象: Trigger [tgr_aaa] 脚本日期: 07/15/2014 17:31:48 ******/SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGO-- =============================================-- Author:<Author,,Name>-- Create date: <Create Date,,>-- Description:<Description,,>-- =============================================CREATE TRIGGER [tgr_aaa_delete] ON [dbo].[aaa] AFTER DELETEAS BEGIN-- SET NOCOUNT ON added to prevent extra result sets from-- interfering with SELECT statements.SET NOCOUNT ON; -- Insert statements for trigger hereinsert into bbb select 'D',CONVERT(CHAR(23), getdate(), 25),* from Deleted;END
这就是当aaa的某条数据被删除时,触发器自动执行后面代码,将删除的数据从虚拟表中取出,插入bbb表。
触发器可以做很多事情,比如在数据变化时进行统计,再比如对相关数据的自动修改,而且是数据库中自动执行,可以省去很多事儿。
但是对于维护却是噩梦,比如java开发人员会觉得非常的困惑,因为他们在java代码中找不到发生预想结果的代码。
所以触发器的使用一定要慎重,我们这次项目最终决定只用来记录操作日志。
再来说说定时器。
这次项目有些数据想在半夜人少的时候批量更新,为了不影响晚上睡觉,决定使用定时器。
网上很多的例子,基本上都会使用SQL Server Agent,不过我最开始真的没找到这东西,因为中文版中叫Sql Server 代理。
后来发现没有那么复杂,那就是使用【管理】下的【维护计划】。如下图。
然后在【维护计划】上点右键,选择【新建维护计划】,画面内容如下:
设定执行间隔和执行时间很简单,没什么可说的,设定好频率和执行的时间点即可,画面显示内容如下:
重点在设定执行内容,可以设定的执行内容在左下角的工具箱,如下图:
这里已经给了很多的任务,只需要将要做的任务拖动到右侧就可以了。
这里重点说的是【执行T-SQL】。它的灵活性非常高,可以执行多行sql语句,甚至可以执行存储过程,而你需要的就是把它拖到任务区域内,并且双击打开,写入需要执行的sql文。
之后就等待到时间执行了。
这里需要说明的几点是:
1,其实维护计划也用到了sql server代理,只是将需要的设定自动设置好了,所以sql server代理也是要开启的,开启方式是在【sql server代理】上点右键,选择【启动】即可。
2,需要特别注意的是,写入T-SQL的时候,没有任何的选项,所以默认的是sql的master库,如果你使用的是不master就必须要在T-SQL中设定,否则会因为找不到表而执行不成功。设定方法为:在第一行写上USE[数据库名]。
- sqlserver的表触发器和定时器
- sqlserver的表触发器和定时器
- Sqlserver 触发器的禁用和启用 触发器的创建
- sqlserver存储过程和触发器的区别
- SQLServer触发器的使用
- SQLSERVER的触发器
- sqlserver触发器的使用
- SqlServer触发器的使用
- sqlserver触发器的使用
- sqlserver的触发器练习
- MySQL触发器与定时器的介绍和错误处理
- MySQL触发器与定时器的介绍和错误处理
- sqlserver储存过程和触发器
- Spring 触发器定时器的应用
- SqlServer中触发器的使用
- SqlServer中触发器的使用 .
- SqlServer触发器的基本使用
- sqlserver 插入之前的触发器
- js 拖拽效果(cookie)
- 做PAT时,循环语句里尽量少用指针
- 插入排序(简单明了)
- 7.14_E题
- 5.9 枚举类型
- sqlserver的表触发器和定时器
- Surciata源码分析之IpsNFQ模式(2)
- 阶乘之和
- cocos2d-x 3.1.1 学习笔记[11] http请求 + json解析
- linux下搭建SVN服务器完全手册
- 有关于dmx控制器的相关使用问题以及当中的特点
- android apk 代码混淆
- eclipse 建立的dynamic web project中无法高亮显示jsp中相同变量,不是很方便啊!
- ViewPager和Fragment