且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

SQL触发器总结

更新时间:2022-09-25 23:28:48

对于不可更新的视图要进行更新时,可以用触发器中的INSTEAD OF进行更新

 


  1. --创建一个插入操作的触发器:当向学生选课表SC中插入一条记录后,变更在学生表STUDENT对应学生的选课门数。  
  2. CREATE TRIGGER STU_IN  
  3. ON SC---对哪个表或者视图进行操作  
  4. FOR INSERT--设定触发条件,也就是在什么情况下会触发这个触发器  
  5. AS   
  6. UPDATE STUDENT  
  7. SET SCNUM = SCNUM +1  
  8. FROM STUDENT INNER JOIN SC  
  9. ON STUDENT.SNO = SC.SNO  
  10.  
  11. set statistics io on 
  12. set nocount on 
  13. insert into sc values('990001','001','99')  
  14. delete from sc where sno='990001' and cno='001' 
  15.  
  16. --创建update触发器  
  17. CREATE TRIGGER STU_UP  
  18. ON STUDENT  
  19. FOR UPDATE 
  20. AS 
  21. IF UPDATE(SNO)  
  22. BEGIN 
  23. RAISERROR('不能对SNO字段进行更新',10,1)  
  24. ROLLBACK TRANSACTION 
  25. END 
  26.  
  27. UPDATE STUDENT  
  28. SET SNO='990032' 
  29. WHERE SNO='990001' 
  30.  
  31. --创建delete触发器  
  32. CREATE TRIGGER STU_DEL  
  33. ON STUDENT  
  34. FOR DELETE 
  35. AS 
  36. DELETE 
  37. FROM SC  
  38. WHERE SC.SNO IN(SELECT SNO FROM DELETED)  
  39.  
  40. exec sp_helptext stu_in--查看已经创建好的触发器的创建语句  
  41.  
  42. CREATE TRIGGER COM_UP  
  43. ON COMPUTER  
  44. INSTEAD OF UPDATE--INSTEAD OF主要用于对视图进行更新  
  45. AS 
  46. IF UPDATE(SNAME)------------------这个SNAME的值来自于输入update语句中的set后面的条件值  
  47. BEGIN 
  48. UPDATE STUDENT  
  49. SET SNAME=INSERTED.SNAME  
  50. FROM STUDENT INNER JOIN INSERTED  
  51. ON STUDENT.SNO=INSERTED.SNO  
  52. END 
  53. ELSE 
  54. BEGIN 
  55. UPDATE SC  
  56. SET CNO=INSERTED.CNO,  
  57. GRADE=INSERTED.GRADE  
  58. FROM SC INNER JOIN INSERTED  
  59. ON SC.SNO=INSERTED.SNO  
  60. END 
  61.  
  62. UPDATE COMPUTER  
  63. SET GRADE=95  
  64. WHERE SNO='990028' 
  65.  
  66. UPDATE COMPUTER  
  67. SET SNAME='王晓晓'-------------------与IF UPDATE(SNAME)中的SNAME相对应  
  68. where SNO='990028' 
  69.  
  70. SELECT * FROM COMPUTER 

 本文转自sucre03 51CTO博客,原文链接:http://blog.51cto.com/sucre/416796,如需转载请自行联系原作者