SQL Server级联更新的实现

数据库 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  

 

 

 

【编辑推荐】

六种SQL Server删除重复行的方法

SQL Server创建数据库的命令

SQL SERVER连接失败的解决方案

带您了解SQL Server游标

SQL Server的优点和缺点

责任编辑:段燃 来源: 互联网
相关推荐

2010-11-10 11:47:35

SQL Server级

2010-11-10 11:51:04

SQL SERVER级

2010-07-15 10:48:48

SQL Server2

2011-08-11 09:49:33

SQL Server 存储过程插入更新数据

2010-09-02 09:45:07

SQL删除

2010-07-08 11:15:37

SQL Server数

2010-11-10 14:18:15

SQL SERVER全

2010-10-20 14:27:09

SQL Server同

2010-10-22 17:33:02

2010-07-12 09:10:05

SQL Server数

2010-11-09 09:43:20

SQL Server查

2010-11-10 15:29:40

SQL SERVER

2010-11-08 11:22:21

SQL Server同

2010-07-06 17:09:45

SQL Server索

2010-11-10 11:54:32

SQL SERVER删

2010-10-20 10:19:33

sql server删

2010-07-19 14:31:14

SQL Server

2010-10-21 14:43:46

SQL Server查

2010-11-09 15:18:37

SQL Server多

2010-09-13 13:58:29

sql server外
点赞
收藏

51CTO技术栈公众号