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

[提问]这个问题因该用触发器还是存储过程解决呀?
现有两张表 T1 和 T2

T1有字段 A1 A2 A3
T2有字段 A1 B2 B3

现在要解决如下问题:

A1都是主键相关连,一一对应。

当T1表中的A2被修改后自动将A2列的数据追加到T2表的B2列后面,条件为T1表的A1等于T2表的A1。






------解决方案--------------------
现有两张表 T1 和 T2

T1有字段 A1 A2 A3
T2有字段 A1 B2 B3

现在要解决如下问题: 

A1都是主键相关连,一一对应。

当T1表中的A2被修改后自动将A2列的数据追加到T2表的B2列后面,条件为T1表的A1等于T2表的A1。

字符串的追加 比如说:我在T1表A2里输入了A2C这个值,那么T2表的A2就自动变为A2C。如果T1表的A2里改为了C3C那么T2表的A2就要变为C3CA2c。

-------------

T1表A2里输入了A2C这个值
——能不能理解为INSERT一条新纪录

假设可以这样理解。Next:

那么T2表的A2就自动变为A2C
——A1都是主键相关连,一一对应,T2没有刚INSERT纪录对应的A1,A2怎么变,能不能理解为T1插入记录T2也跟着插入

假设可以这样理解。Work:

SQL code
create trigger t1_insert
on T1
for insert
as
begin
set nocount on
insert T2 select * from INSERTED
set nocount off
end
go

create trigger t1_update
on T1
for update
as
begin
set nocount on
/*
这样的逻辑要求,就算T2为varchar(8000),都有可能出现T2已经无法容纳的情况,系统就会提示“截断二进制数据或字符串”。
*/
update a set a.B2=b.A2+isnull(a.B2,'') from T2 a join INSERTED b on a.A1=b.A1
set nocount off
end
go