标题:
[
编程其他
]
SQLServer的表触发器和定时器
[打印本页]
作者:
shillan
时间:
2019-5-27 15:37
标题:
SQLServer的表触发器和定时器
触发器
就是当表内数据发生变化时,会自动触发代码。
创建方式为:
在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 here
END
复制代码
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 ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:
<Author,,Name>
-- Create date: <Create Date,,>
-- Description:
<Description,,>
-- =============================================
CREATE TRIGGER [tgr_aaa_delete]
ON [dbo].[aaa]
AFTER DELETE
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for trigger here
insert 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[数据库名]。
---------------------
作者:待业方知努力
来源:CSDN
原文:
https://blog.csdn.net/weightman2008/article/details/37819511
版权声明:本文为博主原创文章,转载请附上博文链接!
欢迎光临 逐梦论坛 (http://temp2023.zhumeng.org/)
Powered by Discuz! 7.2