触发器insert同时插入多条记录问题

bychgh 2012-03-05 09:42:57
说明:表a 有字段 mm,nn字段,表b 的结构和a 是一样的,但都没有【主键】!!,现在要求 a表有新数据插入时,同时插入到b表,本来是用触发器的


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个表都没有主键,请问可以实现吗?还有其他好的解决方案没,请指教~~~~~~~~~
...全文
406 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
bychgh 2012-03-06
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 haiwer 的回复:]

于是想到用 临时表,但可能数据量大时,临时表数据还未插入完,又有新数据进来,会清空这个临时表,造成数据丢失;

这个说法是不对的,临时表不会互相影响,如果数据丢失是其它原因造成的
[/Quote]
每次 触发 insert 的时候,会建一个临时表,将插入的数据放进这个临时表,最后再从这个临时表插入到 表 b,临时表名都是一样的,会不影响?
勿勿 2012-03-06
  • 打赏
  • 举报
回复
这个的你自己去权衡下。我觉得有必要修改设计数据库
昵称被占用了 2012-03-06
  • 打赏
  • 举报
回复
触发器使用对数据库设计要求较高,你的无主键表建立索引本来就很高难度,自己考虑是修改设计还是放弃触发器。

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

适合的东西用在适合的场所
昵称被占用了 2012-03-06
  • 打赏
  • 举报
回复
于是想到用 临时表,但可能数据量大时,临时表数据还未插入完,又有新数据进来,会清空这个临时表,造成数据丢失;

这个说法是不对的,临时表不会互相影响,如果数据丢失是其它原因造成的
bychgh 2012-03-06
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 mingpei0703 的回复:]

比较困惑表怎么没主键?
一般不建议用游标
[/Quote]
这张表是数据中转表,数据量很大,一个小时清空一次
mingpei0703 2012-03-05
  • 打赏
  • 举报
回复
比较困惑表怎么没主键?
一般不建议用游标

22,301

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧