SQL Server级联更新的实现


  本文标签:SQL Server级联更新

  SQL Server级联更新如何实现,是很多人都提到过的问题,下面就教您SQL Server级联更新和级联插入的方法,希望可以让您对SQL Server级联更新有更深的认识  。

  --INSERT 数据插入,验证外键关联逻辑,错误抛出出错信息

  1. IF EXISTS (SELECT NAME FROM SYSOBJECTS  
  2.       WHERE NAME = INS_DOCUMENTTYPE_001 AND TYPE = TR)  
  3.    DROP TRIGGER INS_DOCUMENTTYPE_001  
  4. GO  
  5.  
  6. CREATE TRIGGER INS_DOCUMENTTYPE_001  
  7. ON dbo.DOCUMENTTYPE  
  8. FOR INSERT   
  9. AS   
  10. IF (SELECT COUNT(*) FROM INSERTED WHERE UPNO IS NOT NULL   
  11.       AND (UPNO = NO OR UPNO NOT IN (SELECT NO FROM dbo.DOCUMENTTYPE))) > 0  
  12.    BEGIN  
  13.     DELETE FROM dbo.DOCUMENTTYPE WHERE NO IN (SELECT NO FROM INSERTED)  
  14.     RAISERROR(在被引用表 dbo.DOCUMENTTYPE 中没有与外键 UPNO 的引用列的列表匹配的主键或候选键  。,16,1)  
  15.    END  
  16. GO   

  

  
--UPDATE 数据更新,如果更新了外键,验证外键存在

  1. IF EXISTS (SELECT NAME FROM SYSOBJECTS  
  2.       WHERE NAME = UPD_DOCUMENTTYPE_001 AND TYPE = TR)  
  3.    DROP TRIGGER UPD_DOCUMENTTYPE_001  
  4. GO  
  5.  
  6. CREATE TRIGGER UPD_DOCUMENTTYPE_001  
  7. ON dbo.DOCUMENTTYPE  
  8. FOR UPDATE   
  9. AS   
  10. IF (SELECT COUNT(*) FROM INSERTED WHERE UPNO IS NOT NULL   
  11.       AND (UPNO = NO OR UPNO NOT IN (SELECT NO FROM dbo.DOCUMENTTYPE))) > 0  
  12.    BEGIN  
  13.            SET IDENTITY_INSERT dbo.DOCUMENTTYPE ON  
  14.     DELETE FROM dbo.DOCUMENTTYPE WHERE NO IN (SELECT NO FROM INSERTED)  
  15. --    INSERT INTO dbo.DOCUMENTTYPE SELECT * FROM INSERTED  
  16.     SELECT * INTO dbo.DOCUMENTTYPE FROM INSERTED  
  17.     SET IDENTITY_INSERT dbo.DOCUMENTTYPE OFF  
  18.     RAISERROR(在被引用表 dbo.DOCUMENTTYPE 中没有与外键 UPNO 的引用列的列表匹配的主键或候选键  。,16,1)  
  19.    END  
  20. GO