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谢谢各位.帮忙看看.更新数据量很大.谢谢各位.谢谢.
for update
as
set nocount on
insert AAA select * from deleted
insert AAA select * from inserted
set nocount off
go
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
对表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值为本次修改的字段名称.请问如何实现.谢谢.
表要改一下
*/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