触发器,触发器实例
虽然接触过触发器,可是却不太深入,有的时候碰到还是照样不太理解,现在将这一块空白补上。
触发器内容基本上如下:
值得注意的一点是:在触发器被执行时,系统会创建一个或者两个临时表Inserted和Deleted。用户保存用户更改行的新值和旧值。对于insert操作只会产生Inserted表,保存新插入的每条数据;对于delete操作,只会产生Deleted表,保存被删除的每条数据;对于update操作会同时产生Inserted表和Deleted表,Deleted表中存放的是更新之前的数据,Inserted表中存放的是更新之后的数据。触发器中可以直接使用这两张表。
下面举个具体的例子来说明一下:
以FOR触发器为例:
对于login表,原来数据如下:
触发器的编写过程如下:
执行如下语句和得到的结果如下图所示:
通过上面两个结果的对比,SQL语句将用户身份由管理员->操作员,for触发器改变了用户密码,由123->lj。就是这样一个过程。
使用更新什么字段才执行触发器就行了
CREATE TRIGGER GXDHSL ON RKD
FOR UPDATE
AS
IF(Update(字段名))
begin
DECLARE @DHDH VARCHAR(50) --计划单号
DECLARE @SL decimal(18,6) --修改前数量
DECLARE @DHSL decimal(18,6) --修改后数量
SELECT @DHDH=ysdh,@SL=SSSL FROM DELETED
SELECT @DHSL=SSSL FROM INSERTED
UPDATE GL_QGD SET DHSL=DHSL-ISNULL(@SL,0) WHERE DH=@DHDH
end
go
使用更新什么字段才执行触发器就行了
CREATE TRIGGER GXDHSL ON RKD
FOR UPDATE
AS
IF(Update(字段名))
begin
DECLARE @DHDH VARCHAR(50) --计划单号
DECLARE @SL decimal(18,6) --修改前数量
DECLARE @DHSL decimal(18,6) --修改后数量
SELECT @DHDH=ysdh,@SL=SSSL FROM DELETED
SELECT @DHSL=SSSL FROM INSERTED
UPDATE GL_QGD SET DHSL=DHSL-ISNULL(@SL,0) WHERE DH=@DHDH
end
go