none
請問需要怎樣去監控一個表的某個欄位被誰修改了,並且將前後的數據都列出來 RRS feed

  • 问题



  • 請問需要怎樣去監控一個表的某個欄位被誰修改了,並且將前後的數據都列出來。

    聽說trigger可以實現,但是由於不是很精通tsql,所以請大家幫下忙。。

    Best Regards!!
    If you haven't all the things you want,be grateful for the things you don't have that you didn't want.
    2009年10月26日 17:20

答案

  • go
    create table Test(ID int identity primary key,Name nvarchar(10))
    insert Test select 'A'
    
    go
    --記錄
    create table RecTset(ID int,Name nvarchar(10),NewName nvarchar(10),[ModUser] nvarchar(50))
    
    go
    create trigger tr_Test on Test
    after update
    as
    if @@rowcount>0
        insert RecTset(ID,Name,NewName,[ModUser])
        select
            i.ID,d.Name,i.Name,SUSER_SNAME ()
        from
            inserted i ,deleted d
        where i.ID=d.ID
    
    go
    update Test set Name='B'
    go
    select * from RecTset
    
    ID          Name       NewName    ModUser
    ----------- ---------- ---------- --------------------------------------------------
    1           A          B          'User'
    
    


    ROY WU(吳熹)
    2009年10月27日 1:57
    版主

全部回复




  • 環境is SqlServer 2000
    If you haven't all the things you want,be grateful for the things you don't have that you didn't want.
    2009年10月26日 17:40
  • 用触发器就好了

    写一个update触发器,监控表字段,如果变了就insert变化后的数据写入到一个表内:


    create trigger table1_update
    on table1
    for update
    as
    select * from inserted  --新的数据
    select * from deleted  --原来数据

    将他们保存下来即可


    family as water
    2009年10月27日 1:43
  • go
    create table Test(ID int identity primary key,Name nvarchar(10))
    insert Test select 'A'
    
    go
    --記錄
    create table RecTset(ID int,Name nvarchar(10),NewName nvarchar(10),[ModUser] nvarchar(50))
    
    go
    create trigger tr_Test on Test
    after update
    as
    if @@rowcount>0
        insert RecTset(ID,Name,NewName,[ModUser])
        select
            i.ID,d.Name,i.Name,SUSER_SNAME ()
        from
            inserted i ,deleted d
        where i.ID=d.ID
    
    go
    update Test set Name='B'
    go
    select * from RecTset
    
    ID          Name       NewName    ModUser
    ----------- ---------- ---------- --------------------------------------------------
    1           A          B          'User'
    
    


    ROY WU(吳熹)
    2009年10月27日 1:57
    版主