insert觸發器 同時插入多條記錄

2021-06-05 16:15:43 字數 1330 閱讀 8698

需求:寫了乙個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

asbegin

insert into storefile(storeid) (select storeid from inserted)

end2、而我在實際應用中,還存在與storefile關聯的storefileitem資料表,要用插入storefile時自動生成的主鍵fileid,插入storefileitem中作為外來鍵關聯,看來只有用"游標"了,其實也不難

create trigger triinsertstorefile on tblstore

for insert

asdeclare @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)

endclose stores_cursor

deallocate stores_cursor

總算解決問題。

最後能把對其他資料表的插入寫在單獨的儲存過程中,就更理想了

觸發器中 一次插入多條資料

觸發器中 select id from inserted 這個句子有個情況不適合,就是如果一次操作插入的是多行,這條語句不就不行了麼,那為什麼檢查語法時還沒錯誤呢 create trigger tr zz on zz for insert asbegin declare zzlb varchar 3...

MySQL使用INSERT插入多條記錄

mysql使用insert插入多條記錄,應該如何操作呢?下面就為您詳細介紹mysql使用insert插入多條記錄的實現方法,供您參考。看到這個標題也許大家會問,這有什麼好說的,呼叫多次insert語句不就可以插入多條記錄了嗎!但使用這種方法要增加伺服器的負荷,因為,執行每一次sql伺服器都要同樣對s...

觸發器 mysql觸發器

觸發器是一種特殊的儲存過程,它在插入 刪除或修改特定表中的資料時觸發執行,它比資料庫本身標準的功能有更精細和更複雜的資料控制能力。和儲存過程一樣,很少使用。1 觸發器的作用 2 建立觸發器 建立測試環境 mysql create database test db query ok,1 row aff...