请问得到这样的解决,如何操作比较好.
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