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