需求:写了一个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

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

相关文章:

  • 2022-12-23
  • 2021-11-09
  • 2022-01-04
  • 2021-09-24
  • 2022-01-04
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2021-11-20
  • 2021-08-15
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-12-08
  • 2022-02-07
相关资源
相似解决方案