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

需求:写了一个FOR INSERT的触发器,每次插入数据的时候向相关的数据表中也同时插入数据。
问题:测试的时候,一次只向主表中插入一条记录,那么触发器没有问题。在实际使用的时候,因为使用了insert into select语句,一次向主表中插入了超过一条的记录,如17条,但是发现其他数据表中却都只有一条记录,明显出现了错误。

解决:
1、上网查询“一次插入多条”这样的关键字
2、通过在触发器中书写:select count(*) from inserted,的确可以看到一次插入了多条
3、网上说用“游标”来实现
分析:
1、其实不用右边也可以,如果只是把插入的数据直接插入其他相关的数据表,完全可以使用insert into (select from inserted)来实现。
例如:
CREATE TRIGGER TriInsertStoreFile ON tblStore
FOR INSERT
AS

BEGIN
  Insert into storeFile(storeID) (SELECT storeID FROM INSERTED)
END
2、而我在实际应用中,还存在与storeFile关联的storeFileItem数据表,要用插入storeFile时自动生成的主键FileID,插入storeFileItem中作为外键关联,看来只有用"游标"了,其实也不难

CREATE TRIGGER TriInsertStoreFile ON tblStore
FOR INSERT
AS

DECLARE @storeID int
DECLARE @FILEID int

SET @storeID=0
SET @FILEID=0

DECLARE stores_cursor CURSOR FOR
SELECT storeID FROM Inserted

OPEN stores_cursor

FETCH NEXT FROM stores_cursor
INTO @storeID

WHILE @@FETCH_STATUS = 0
BEGIN
  Insert into storeFile(storeID) (SELECT storeID FROM INSERTED)
  SET @FILEID=@@identity
  Insert into storeFileItem(fileID) values(@FILEID)
END

CLOSE stores_cursor
DEALLOCATE stores_cursor

总算解决问题。
最后能把对其他数据表的插入写在单独的存储过程中,就更理想了


  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值