现在有张GL_MARRIAGE_PUBLIC_HIS(婚姻历史表)  我要在这上面建个update触发器,只要是修改了一个字段,或者多个字段,就把修改的那一整行保存到inserted表里,GMU_GLOBAL_ID 这是主键,求指导
if(object_id('tgr_public_his_update','TR') is not null)
drop trigger tgr_public_his_update
go
create trigger tgr_public_his_update
on GL_MARRIAGE_PUBLIC_HIS
for update
as
declare @
写到这里我不会了...sql

解决方案 »

  1.   

    if(object_id('tgr_public_his_update','TR') is not null)
        drop trigger tgr_public_his_update
    go
    create trigger tgr_public_his_update
    on GL_MARRIAGE_PUBLIC_HIS
        for UPDATE   --其实这个地方已经记录了更新任何一个地方就触发该触发器了
    as
        IF EXISTS(SELECT * FROM INSERTED ) AND EXISTS(SELECT * FROM DELETED)  --分别验证更新前,及更新后数据存在与否
        BEGIN
    INSERT INTO GL_MARRIAGE_PUBLIC_HIS_inSerted   --新建的一个记录原数据的表
    SELECT * FROM DELETED

        END 
      

  2.   


    inserted 在处理过程中是一个系统用表
      

  3.   

    INSERT INTO GL_MARRIAGE_PUBLIC_HIS_inSerted  SELECT * FROM DELETED  是这样吧,因为我要存更新后的整行数据 INSERT INTO GL_MARRIAGE_PUBLIC_HIS_inSerted SELECT * FROM INSERTED
      

  4.   


    更新后的用inserted 更新前的用deleted
      

  5.   

    怎么报错呢  错误信息:不能在 'inserted' 表和 'deleted' 表中使用 text、ntext 或 image 列。 咋办呢 要换成INSTEAD OF触发器吗?
      

  6.   

    if(object_id('tgr_public_his_update','TR') is not null)   
      drop trigger tgr_public_his_update 
    go 
      create trigger tgr_public_his_update 
    on GL_MARRIAGE_PUBLIC_HIS     
    instead of UPDATE   
    as 
    IF EXISTS(SELECT * FROM INSERTED ) AND EXISTS(SELECT * FROM DELETED)
      BEGIN
        INSERT INTO dbo.GL_MARRIAGE_PUBLIC_HIS_INSERTED SELECT * FROM DELETED              
      END 这是触发器 我把for 用 instead of 替代了。不报错了,但是我用sql语句修改测试的时候,GL_MARRIAGE_PUBLIC_HIS(婚姻历史表)更新不了 。触发器里也是没更新的数据,这触发器有问题,麻烦你帮我看看好么  下面是表结构图
      

  7.   

    我之前改成INSERTED的了,怎么又变成 DELETED了 现在的问题是GL_MARRIAGE_PUBLIC_HIS(婚姻历史表)更新不了,GL_MARRIAGE_PUBLIC_HIS_INSERTED 这表里是更新后的数据
      

  8.   

    见 http://bbs.csdn.net/topics/390391049?page=1#post-393904548