--记录操作的示例--创建记录的日志表
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 delete
as
insert t_log(事件类型,参数,执行的语句) exec('dbcc inputbuffer(@@spid)')
go--初始化表
insert into test values(1)
godelete test
go--显示记录情况
select * from t_log
go--删除演示环境
drop table t_log,test

解决方案 »

  1.   

    多谢!可是执行有误:
    Server: Msg 2560, Level 16, State 14, Line 1
    在触发器上。
      

  2.   

    哦,还有一句:Parameter 1 is incorrect for this DBCC Statement
      

  3.   

    我的在sql2000下测试通过, sql7.0现在没有测试环境,不知道是什么原因导致.--你在查询分析器中执行下面这句,如果有错误,说明sql7.0不支持.
    exec('dbcc inputbuffer(@@spid)')
      

  4.   

    多谢zjcxc(邹建)指导
    在Query Anylizer里单独执行
    dbcc inputbuffer(@@spid)总是语法错误呀??
      

  5.   

    exec('dbcc inputbuffer(@@spid)')
    dbcc inputbuffer(@@spid)两句语法都正确,执行总是出现上面的错误。
    如是Sql7不支持,用什么方法实现呢?谢谢!
      

  6.   

    看来sql7不支持,那就不知道该怎么办了,7.0不熟.升级到sql2000
      

  7.   

    我把触发器修改为,可行吗?--记录操作的触发器
    create trigger t_update on test
    for delete
    as
    declare @statement nvarchchar(255)
    set @statement = 'DBCC INPUTBUFFER(' + convert(char(2), @@SPID) + ')'
    insert t_log(事件类型,参数,执行的语句) exec(@statement)
    go
      

  8.   

    我是怕会把
    declare @statement nvarchchar(255)
    set @statement = 'DBCC INPUTBUFFER(' + convert(char(2), @@SPID) + ')'这两句当成DBCC INPUTBUFFER的输出但测试却是正确的