有关触发器的问题-一次插入多条
2012-12-09 18:44
288 查看
有关触发器的问题-一次插入多条
需求:写了一个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
总算解决问题。
最后能把对其他数据表的插入写在单独的存储过程中,就更理想了
需求:写了一个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
总算解决问题。
最后能把对其他数据表的插入写在单独的存储过程中,就更理想了
相关文章推荐
- 有关触发器的问题-一次插入多条
- SQLServer 触发器 同时插入多条记录有关问题
- mysql一次插入多条记录问题
- Oracle数据库中有关触发器问题
- mysql使用游标 触发一次 插入多条记录
- 怎么解决重复提交的问题,即网络不好的时候,提交按钮点了一次,但是却发起了多次http url请求,数据库中写入了多条重复记录(当然ID是不重复的,因为毕竟是多条http url记录)
- SQL 一次插入多条记录 例句
- Oracle使用虚拟表dual一次插入多条记录
- 关于CListCtrl控件更新Item的闪烁问题和一次插入大容量数据的显示问题解决办法
- 翻译《有关编程、重构及其他的终极问题?》——3.复制一次,检查两次
- 一次向数据库插入多条记录
- MongoDB的update有关问题(JAVA)——如何一次更新所有的相同记录
- SQLite一条SQL语句插入多条记录失败的问题
- sql语句优化一次进行多条记录的-----插入和修改
- 关于CListCtrl控件更新Item的闪烁问题和一次插入大容量数据的显示问题解决办法
- MySQL 一次执行多条语句的实现及常见问题
- mysql处理删除自增字段之后下一次插入数据的问题
- 在论坛中出现的比较难的sql问题:44(触发器专题 明细表插入数据时调用主表对应的数据)
- mybatis使用foreach批次插入,解决sequence只查询一次的问题
- 在SQL Server中SQL语句的Insert支持一次插入多条记录?