当前位置: 代码迷 >> Sql Server >> [提问]这个有关问题因该用触发器还是存储过程解决呀
  详细解决方案

[提问]这个有关问题因该用触发器还是存储过程解决呀

热度:5   发布时间:2016-04-27 17:24:15.0
[提问]这个问题因该用触发器还是存储过程解决呀?
现有两张表 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_inserton T1for insertasbeginset nocount oninsert T2 select * from INSERTEDset nocount offendgocreate trigger t1_updateon T1for updateasbeginset 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.A1set nocount offendgo
  相关解决方案