日期:2014-05-18  浏览次数:20382 次

请问得到这样的解决,如何操作比较好.

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   ID

KEY1_OLD   100  

需在BBB表记录

字段名   值
AAA.ID   BBB.ID
NAME   ID
KEY2_NEW   1

第二执行如下语句

update   TEST   SET   NAME= 'EEEEEEE '   WHERE   ID=101;
需在AAA   表记录

字段名   值
NAME   NAME

KEY1_OLD   101

需在BBB表记录

字段名   值
AAA.ID   BBB.ID
NAME   NAME
KEY2_NEW   null

谢谢各位.帮忙看看.更新数据量很大.谢谢各位.谢谢.



------解决方案--------------------
/*
表要改一下
*/

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)
)
GO

CREATE 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)
)
GO

create 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