如果inserted和deleted中都有数据就是update操作,否则就是插入或者删除操作。

解决方案 »

  1.   

    inserted 为修改前数据
    deleted 为修改后数据
    再配合for update,delete,insert来判断在什么时候起用触发器。
      

  2.   

    这个我知道我说的是能否得到SQL语句
      

  3.   

    就是把原始SQL语句得到,好像事件探查器一样
      

  4.   

    那不可能,如果两条删除语句删除的内容相同但是条件不同
    比如说对于同两条记录可以根据一个字段来删除也可以根据两个字段来删除你不可能知道delete from yourtable where id =5 
    和delete from yourtable where id =5 or 1=2 or 3=4 or 5=6 ...
    你让触发器怎么区分?
      

  5.   

    CREATE TABLE testTABLE ( ID INT)
    CREATE TABLE spy(EventType NVARCHAR(30),Parameters INT,EventInfo NVARCHAR(255))GO
    CREATE TRIGGER Trg_Spy ON testTABLE
    FOR INSERT,DELETE,UPDATE
    AS
    DECLARE @tmpSQL NVARCHAR(300)
    SET @tmpSQL= 'DBCC INPUTBUFFER('+CAST(@@SPID AS VARCHAR)+')'
    INSERT INTO spy(eventType,Parameters,EventInfo)
    EXEC (@tmpSQL)GO/*spy Table中存的就是影響該table記錄的語句,
      這種方法應該會有一些隱患,譬如說EventInfo只能抓255個字符等等,
      我沒仔細去研究....
      曾經有一張帖子討論過這類問題,好像是不了了之了,(記不清了)
    */
      

  6.   

    呵呵,上次是我发的帖子,之所以不了了之是因为我在查询分析器执行
    dbcc inputbuffer(@@spid)得到的结果总是Language Event 0 dbcc inputbuffer(@@spid)  还是飘香兄高!