您的位置:首页 > 其它

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

2012-04-10 11:46 417 查看
需求:写了一个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

总算解决问题。

最后能把对其他数据表的插入写在单独的存储过程中,就更理想了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: