create trigger tr
on 表
for insert,update,delete
as
set xact_abort on
--开始事务
begin tranif not exists(select 1 from deleted)
begin
--插入操作说明
endif not exists(select 1 from inserted)
begin
--删除操作说明
endif exists(select 1 from deleted) and exists(select 1 from inserted)
begin
--更新操作说明
endcommit tran
go
on 表
for insert,update,delete
as
set xact_abort on
--开始事务
begin tranif not exists(select 1 from deleted)
begin
--插入操作说明
endif not exists(select 1 from inserted)
begin
--删除操作说明
endif exists(select 1 from deleted) and exists(select 1 from inserted)
begin
--更新操作说明
endcommit tran
go
create table t_log(
id int identity(1,1) primary key,
工作站名 nchar(30) not null default host_name(),
操作员 sysname DEFAULT SUSER_SNAME(),
操作时间 datetime default getdate(),
事件类型 nvarchar(30),
参数 int,
执行的语句 nvarchar(255))
go--演示用的数据表
create table test(id int)
go--记录操作的触发器
create trigger t_update on test
for insert,update,delete
as
insert t_log(事件类型,参数,执行的语句) exec('dbcc inputbuffer(@@spid)')
go--初始化表
insert into test values(1)
goupdate test set id=100
go--显示记录情况
select * from t_log
go--删除演示环境
drop table t_log,test
CREATE TABLE [dbo].[Eiems_INVOICE_log] (
[INV_ID] [int] IDENTITY (1, 1) NOT NULL ,
[INV_SERIESNO] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[INV_INVOICENO] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[INV_DATE] [datetime] NULL ,
[INV_TOTALAMT] [numeric](22, 6) NULL ,
[SYSTime] [datetime] NULL ,
[SYSUser] [nvarchar] (20) COLLATE Chinese_PRC_CI_AS NULL ,
[SYSEditFlag] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[SYSChangeFlag] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]
GO--演示用的数据表
CREATE TABLE [dbo].[Eiems_INVOICE] (
[INV_ID] [int] IDENTITY (1, 1) NOT NULL ,
[INV_SERIESNO] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[INV_INVOICENO] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[INV_DATE] [datetime] NULL ,
[INV_TOTALAMT] [numeric](22, 6) NULL ,
[SYSTime] [datetime] NULL ,
[SYSUser] [nvarchar] (20) COLLATE Chinese_PRC_CI_AS NULL ,
[SYSEditFlag] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[SYSChangeFlag] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]
GO
--记录操作的触发器
create table test(id int
CREATE TRIGGER [vivi] ON [dbo].[Eiems_INVOICE]
FOR INSERT, UPDATE, DELETE
AS
insert Eiems_INVOICE_log
select * from [dbo].[Eiems_INVOICE]
go这个触发器语法是不正确的,怎么修改呢?
CREATE TRIGGER [vivi] ON [dbo].[Eiems_INVOICE]
FOR INSERT, UPDATE, DELETE
ASset xact_abort on
--开始事务
begin tranif not exists(select 1 from deleted)
begin
insert Eiems_INVOICE_log
select * from inserted
endif not exists(select 1 from inserted)
begin
insert Eiems_INVOICE_log
select * from deleted
endif exists(select 1 from deleted) and exists(select 1 from inserted)
begin
insert Eiems_INVOICE_log
select * from deleted
insert Eiems_INVOICE_log
select * from inserted
endcommit tran
go
有人知道是哪2个函数么?
begin
insert Eiems_INVOICE_log
select * from deleted
insert Eiems_INVOICE_log
select * from inserted
end 当更新操作的时候,
为什么_log表中存储了4条数据。
一条更新前数据;三条更新后的数据。