演示:通过触发器对数据库进行级联操作

来源:互联网 发布:永久免费进销存软件 编辑:程序博客网 时间:2024/05/16 15:32

背景:

      数据库中有两个表tableA 和tableB,tableA的主键是ID,ID 在tableB中是外键,这个外键约束叫 FK_tableB_ID

目标:

     在更新tableA的主键的同时,更新tableB中的 ID

思路:

     在更新tableA中的 ID 时触发一个触发器,这个触发器主要会作如下操作:

     1.禁用约束 FK_tableB_ID

      2.更新tableA中的 ID

     3.更新tableB中的 ID

     4.启用约束  FK_tableB_ID

SQL 代码:

--创建表tableACREATE TABLE tableA(ID nchar(4) NOT NULL PRIMARY KEY)GO--创建表tableBCREATE TABLE tableB(ID nchar(4) NOT NULL,CONSTRAINT FK_tableB_ID FOREIGN KEY(ID) REFERENCES tableA(ID))GO--创建触发器CREATE TRIGGER updateIDON tableAINSTEAD OF UPDATEASBEGINBEGIN TRYBEGIN TRANSACTION  DECLARE @myID nchar(4) DECLARE @oldID nchar(4)SELECT @myID = ID FROM INSERTEDSELECT @oldID = ID FROM DELETED--1.禁用外键约束ALTER TABLE tableB NOCHECK CONSTRAINT  FK_tableB_ID--2.更新tableA表UPDATE tableA SET ID = @myID WHERE ID = @oldID--3.更新tableB表UPDATE tableB SET ID = @myID WHERE ID = @oldID--4.启用外键约束ALTER TABLE tableB CHECK CONSTRAINT  FK_tableB_IDCOMMIT TRANSACTIONEND TRYBEGIN CATCHROLLBACK TRANSACTIONEND CATCHENDGO




原创粉丝点击