触发器基本语法格式:
create trigger tri_name
on table
for insert/update/deleted
asSQL code
触发器基本语法解析:
create trigger tri_name //(tri_name:自定义触发器的名称)
on table //(table:触发器的表名)
for insert/update/deleted //(触发器类型:insert插入数据触发,update更新数据触发,deleted删除数据触发)as
declare @kssj datetime //(定义一个变量,做中间处理)
declare @sqbh char(40)select @kssj = kssj,@sqbh = sqbh from inserted
//插入数据时,插入的数据在表inserted
//更新数据时,更新后的数据在表inserted,更新前的数据在表中deleted
//删除数据时,删除的数据在表deleted
//不同的操作可以取出不同的中间数据做处理,案例中是取出插入的数据
update table2 set isks = 1,kksj = @kssj where sqbh = @sqbh
将插入的值同步更新到另一个表”
触发器的限制:(触发器是一种特殊的储存过程)
一个表最多只能有三个触发器,insert,update,delete
●每个触发器只能用于一个表
●不能对视图、临时表创建触发器
●Truncate table能删除表,但不能触发触发器
●不能将触发器用于系统表
合理地使用触发器对性能的影响是正面的。在设计和使用触发器时,经常地用sp_depends命令了解对象所关联的触发器是有好处的,该命令能列出触发器影响的所有对象、表和视等。
在定义几类数据库对象的时候,对存储过程、索引和触发器要给予特别的注意,尤其存储过程,它设计的好坏对数据库性能的影响很大。
说明:Sybase触发器使用的两个测试表:Deleted表和Inserted表,它们都是临时表,其结构与触发器的基表结构相同,用来存放与修改相关的数据行。
常见的触发器有三种:分别应用于Insert,Update,Delete事件。
使用触发器的优点:
触发器是自动的,它们在对表的数据作了任何修改之后立即被激活。
触发器可以通过数据库中的相关表进行层叠更改。例如,可以在 titles 表的 title_id 列上写入一个删除触发器,以使其它表中的各匹配行采取删除操作。
触发器可以强制限制,这些限制比用 CHECK 约束所定义的更复杂。与 CHECK 约束不同的是,触发器可以引用其它表中的列。
小例子:
USE [SmartMeter]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER TRIGGER [dbo].[trg_FreezeDay_Insert]
ON [dbo].[FreezeDay]
FOR Insert
AS
BEGIN
DECLARE @meterid varchar(40),@currdate datetime,@Currqty numeric(18,2),@currcbrq datetime
SELECT @meterid=meterid,@currdate=freezedate,@Currqty=FreezeNumber,@currcbrq=ReadDate
FROM inserted
begin
delete from [gsdata].[dbo].[ChaoBiaoInfo] where YHBH=@meterid and CBRQ=@currcbrq and BYCBS=@Currqty and cbny=@currdate
insert into [gsdata].[dbo].[ChaoBiaoInfo]([YHBH], [CBRQ], [BYCBS], [cbny])
values(@meterid,@currdate,@Currqty,REPLACE( left(@currdate,7),'-',''))
end
END
GO