CREATE TABLE AAA
(
ID int IDENTITY (1, 1) ,
NAME varchar (50) NULL ,
KEY1_OLD varchar(255) NULL,
PRIMARY KEY(ID)
)
CREATE TABLE BBB
(
ID int ,
NAME varchar(50),
KEY2_NEW varchar(255) 
)CREATE TABLE TEST
(
ID int ,
NAME varchar(100) NULL,
AGE int NULL
PRIMARY KEY(id)
)INSERT INTO TEST VALUES(100,'AA',20);
INSERT INTO TEST VALUES(101,'BB',20);
INSERT INTO TEST VALUES(102,'CC',20);
INSERT INTO TEST VALUES(103,'DD',20);需求如下:
第一执行如下语句:
update TEST SET ID=1 WHERE NAME='AA';需在AAA 表记录字段名 值
NAME IDKEY1_OLD 100 需在BBB表记录字段名 值
AAA.ID BBB.ID
NAME ID
KEY2_NEW 1第二执行如下语句update TEST SET NAME='EEEEEEE' WHERE ID=101;
需在AAA 表记录字段名 值
NAME NAMEKEY1_OLD 101需在BBB表记录字段名 值
AAA.ID BBB.ID
NAME NAME
KEY2_NEW null谢谢各位.帮忙看看.更新数据量很大.谢谢各位.谢谢.

解决方案 »

  1.   

    把aaa,bbb的结果写出来.没看懂你的要求.
      

  2.   

    create trigger tr_test on Test
    for update
    as
    set nocount on
    insert AAA select * from deleted
    insert AAA select * from inserted
    set nocount off
    go
      

  3.   

    create trigger tr_test on Test
    for update
    as
    set nocount on
    if update(id)
    begin
    insert AAA(name, key1_old) select 'id',id from deleted
    insert BBB(name, key2_new) select 'id',id from inserted
    end
    if update(name)
    begin
    print '自己写,改'
    end
    set nocount off
    go
      

  4.   

    谢谢上面各位的回帖.谢谢.不好意思,刚才没有说明.谢谢
    对表test更新进行触发
     分两种情况:
        a:当直接修改主键时,需在AAA 表种记录如下信息;
        执行update TEST SET ID=1 WHERE NAME='AA'后;    第一需求:在AAA表需有如下记录
           ID          NAME      KEY1_OLD 
           111          id        1 
        第二需求:在BB表需有如下记录       ID         NAME       KEY2_NEW   
           111          id           100说明:
         AAA表中id为自增长类型;
         AAA与BBB中的ID在关联的;
         NAME就是主键或者其他字段名称;
         KEY1_OLD 与KEY2_NEW为主键修改前的值与修改后的值.    b:当修改其他字段时(除主键外)时,需在AAA
        a:当直接修改主键时,需在AAA 表种记录如下信息;
        执行update TEST SET NAME='EEEEEEE' WHERE ID=101;后;    第一需求:在AAA表需有如下记录
           ID          NAME      KEY1_OLD 
           112          id        101 
        第二需求:在BB表需有如下记录       ID         NAME       KEY2_NEW   
           112         NAME           NULL说明:
    AAA表中id为自增长类型;
          AAA与BBB中的ID在关联的;
            AAA表中的name值为主键字段名称;
    BBB表中的name值为本次修改的字段名称.请问如何实现.谢谢.
      

  5.   

    如果批量更新,要实现一一对应 BBB.ID=AAA.ID,处理起来很麻烦。整合成一个表好处理一些,但还是难处理。
      

  6.   

    /*
    表要改一下
    */CREATE TABLE AAA(
    ID int IDENTITY(1, 1) NOT NULL,
    NAME varchar (50),
    KEY1_OLD varchar (255),
    CONSTRAINT PK_AAA_ID PRIMARY KEY CLUSTERED (ID)
    )
    GOCREATE TABLE BBB (
    ID int IDENTITY (1, 1) NOT NULL,--这个改为自增列
    NAME varchar (50),
    KEY2_NEW varchar (255),
    Modified datetime,--加个更新时间,可以不需要,但下面触发器也要相应改。
    CONSTRAINT PK_BBB_ID PRIMARY KEY CLUSTERED (ID)
    )
    GOcreate trigger tr_test
    on TEST
    for update
    as
    set nocount on
    if update(ID)--如果更新主键ID
    begin
    insert AAA select 'ID', ID from deleted
    insert BBB select 'ID', ID, getdate() from inserted
    end
    if update(NAME)--如果更新NAME字段
    begin
    insert AAA select 'ID', ID from inserted
    insert BBB select 'NAME', NULL, getdate() from inserted
    end
    set nocount off
    go
      

  7.   

    to Limpire(昨夜小楼) 首先感谢你的解答.现在存在一个问题.我对test表还要监控insert操作.问题是:id值无法关联对应哦.如何解决呢?谢谢