有关触发器的问题-一次插入多条
需求:写了一个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
总算解决问题。
最后能把对其他数据表的插入写在单独的存储过程中,就更理想了
posted on 2006-08-04 11:08 littlebamboo 阅读(719) 评论(0) 编辑 收藏 举报