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

触发器insert同时插入多条记录问题
说明:表a 有字段 mm,nn字段,表b 的结构和a 是一样的,但都没有【主键】!!,现在要求 a表有新数据插入时,同时插入到b表,本来是用触发器的 
SQL code


ALTER TRIGGER [dbo].[trigger_aa]
   ON  [dbo].[aa]
   AFTER INSERT
AS 
BEGIN
  insert into b select id from inserted
END


这样没什么问题,但现在是 表b 的名字是动态的,于是只能用 exec ,exec('insert info '+@table_b + ' select from a') 注意后面的,不能再用 inserted,这样同时插入多条记录的时候,会在b 表里重复插入记录,于是想到用 临时表,但可能数据量大时,临时表数据还未插入完,又有新数据进来,会清空这个临时表,造成数据丢失;还有一种方法是用游标,但这2个表都没有主键,请问可以实现吗?还有其他好的解决方案没,请指教~~~~~~~~~

------解决方案--------------------
比较困惑表怎么没主键?
一般不建议用游标
------解决方案--------------------
于是想到用 临时表,但可能数据量大时,临时表数据还未插入完,又有新数据进来,会清空这个临时表,造成数据丢失;

这个说法是不对的,临时表不会互相影响,如果数据丢失是其它原因造成的
------解决方案--------------------
触发器使用对数据库设计要求较高,你的无主键表建立索引本来就很高难度,自己考虑是修改设计还是放弃触发器。

一般,触发器内尽量不要用动态语句,会破坏事务性,这也是你发现丢失数据的主要原因。

适合的东西用在适合的场所
------解决方案--------------------
这个的你自己去权衡下。我觉得有必要修改设计数据库