最近搞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語句沒有執行,在此告知。
