數據庫觸發器for,instead of和after的使用


  最近搞SQL server2008 R2數據庫課程設計,在使用for,instead of和after是遇到一點小阻礙,最終解決:

創建的觸發器如下:

 1 USE [choose_Man]
 2 GO
 3 /****** Object:  Trigger [dbo].[tri_field]    Script Date: 11/24/2017 20:49:38 ******/
 4 SET ANSI_NULLS ON
 5 GO
 6 SET QUOTED_IDENTIFIER ON
 7 GO
 8 ALTER trigger [dbo].[tri_field] on [dbo].[tb_field]
 9 for insert,update
10 as
11 if(select COUNT(*) from tb_college,inserted
12      where tb_college.collegeid = inserted.collegeid)=0
13 begin 
14        print '未找到該專業的院系信息,請添加相應院系后重試!'
15        rollback
16 end
17 else IF
18     (SELECT    COUNT(*) from tb_field,inserted
19      where tb_field.fieldid=inserted.fieldid)>0
20  begin 
21     print'專業號碼產生沖突,請核對后重試!'
22     rollback
23  end
24  

插入的數據如下:

1 insert into tb_field(fieldid,collegeid,fieldname,fieldmaster,telephone) values('F0022','C0008','數學與統計系','夏宏興','3345901')

報錯:

解決:

首先使用for,代碼第九行,我插入的數據時,觸發器是在SQL語句執行完成之后才觸發的,所以在插入數據之后,觸發器再檢查時就檢查出有相同的fieldid了,所以應該將檢查條件設置成大於1,而不是0

(SELECT    COUNT(*) from tb_field,inserted
19      where tb_field.fieldid=inserted.fieldid)>1

最后成功插入數據。

用for控制時,它的作用默認是和after一樣的,用instead of是,執行SQL語句之前觸發觸發器,最后顯示(1行受影響),但是我查詢表數據的時候發現並沒有將數據插入表中,應該是SQL語句沒有執行,在此告知。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM