您的位置:首页 > 数据库

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

2012-06-20 19:46 537 查看

背景:

数据库中有两个表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 代码:

--创建表tableA
CREATE TABLE tableA(
ID nchar(4) NOT NULL PRIMARY KEY
)
GO

--创建表tableB
CREATE TABLE tableB(
ID nchar(4) NOT NULL,
CONSTRAINT FK_tableB_ID FOREIGN KEY(ID) REFERENCES tableA(ID)
)
GO

--创建触发器
CREATE TRIGGER updateID
ON tableA
INSTEAD OF UPDATE
AS
BEGIN
BEGIN TRY
BEGIN TRANSACTION

DECLARE @myID nchar(4)
DECLARE @oldID nchar(4)

SELECT @myID = ID FROM INSERTED
SELECT @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_ID

COMMIT TRANSACTION
END TRY

BEGIN CATCH
ROLLBACK TRANSACTION
END CATCH
END
GO
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: