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

解决方案 »

  1.   

    --创建记录的日志表
    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
      

  2.   

    --创建记录的日志表
    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这个触发器语法是不正确的,怎么修改呢?
      

  3.   

    create table test(id int
    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
      

  4.   

    还想在日志里面添加几个标志:SQL用户、windows用户。
    有人知道是哪2个函数么?
      

  5.   

    有人知道取SQL用户、windows用户值的函数是什么吗?
      

  6.   

    有人知道取SQL用户、windows用户值的函数是什么吗?
      

  7.   

    if  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  
    end  当更新操作的时候,
    为什么_log表中存储了4条数据。
    一条更新前数据;三条更新后的数据。