1. /*设计一个触发器,当删除Employees中的某个雇员时,删除Orders表中的与这个雇员*/  
  2.  
  3. /*相关的一切记录。*/  
  4.  
  5. /*********** 第一步、创建存储过程 ***********/  
  6.  
  7. drop Trigger Employees_Delete  
  8.  
  9. go  
  10.  
  11. Create Trigger Employees_Delete  
  12.  
  13. On Employees  
  14.  
  15. INSTEAD OF Delete  --此处必须用INSTEAD OF如果采用For 或UPDATE模式,系统会报错,详见SQL参考  
  16.  
  17. As 
  18.  
  19. Begin 
  20.  
  21.   --删除雇员前必须先删除参照该雇员的所有关系里的纪录   
  22.  
  23.   --1、先删除订单明细表里,该雇员所下订单的明细  
  24.  
  25.   Delete [Order Details] From Orders Inner Join Deleted On Orders.EmployeeId=Deleted.EmployeeId   
  26.  
  27.   where Orders.OrderID=[Order Details].OrderID  
  28.  
  29.          
  30.  
  31.   --2、再删除订单表里,该雇员所下的订单  
  32.  
  33.   Delete Orders From  Deleted   
  34.  
  35.   where Orders.EmployeeId=Deleted.EmployeeId  
  36.  
  37.  
  38.   --3、删除EmployeeTerritories表里该雇员的信息  
  39.  
  40.   Delete EmployeeTerritories From Deleted   
  41.  
  42.   where EmployeeTerritories.EmployeeId=Deleted.EmployeeId  
  43.  
  44.  
  45.   --4、删除雇员表里该雇员的信息,由于前面使用的是INSTEAD OF模式,此处必须有,否则雇员表里的数据没有被删除  
  46.  
  47.   Delete Employees From Deleted   
  48.  
  49.   where Employees.EmployeeId=Deleted.EmployeeId  
  50.  
  51. End   
  52.  
  53. Go  
  54.  
  55.  
  56. /*********** 第二步、执行删除操作,比较删除前后各表记录数的变化 ***********/  
  57.  
  58. --1、查看删除数据前各表的记录数  
  59.  
  60. select count(*) from Employees  
  61.  
  62. select count(*) from EmployeeTerritories  
  63.  
  64. select count(*) from Orders  
  65.  
  66. select count(*) from [Order Details]  
  67.  
  68.  
  69. --2、执行删除9号雇员的命令  
  70.  
  71. delete Employees where EmployeeId =9  
  72.  
  73.  
  74. --3、查看删除数据前各表的记录数  
  75.  
  76. select count(*) from Employees  
  77.  
  78. select count(*) from EmployeeTerritories  
  79.  
  80. select count(*) from Orders  
  81.  
  82. select count(*) from [Order Details]