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