关于触发器使用(外键)
含主外键关系:
CREATE TRIGGER [dbo].[TriggerDeleteBlogs]
ON [dbo].[T_Blog_Categories]
INSTEAD OF DELETE
AS
BEGIN
DECLARE @CategoryId INT;
SELECT @CategoryId=CategoryId FROM deleted
DELETE T_Blog_Blogs WHERE CategoryId=@CategoryId
DELETE T_Blog_Categories WHERE CategoryId=@CategoryId
END
不含主外键关系:
CREATE TRIGGER [dbo].[TriggerDeleteBlogs]
ON [dbo].[T_Blog_Categories]
FOR DELETE
AS
BEGIN
DECLARE @CategoryId INT;
SELECT @CategoryId=CategoryId FROM deleted
DELETE T_Blog_Blogs WHERE CategoryId=@CategoryId
END
------------------------------------------------------------------------------------------------------------------------------------
-- 以下是详解。
-- 2011-12-01最后修改。
------------------------------------------------------------------------------------------------------------------------------------
src:http://www.1589.cn/showArticle0106000000S260.htm
例如以下问题:
父子表的删除问题,如果在删除一个父表时,希望同时删除子表(也称为:外键表、级联表)中的数据,以保持数据的完整性。一般这个功能,很多同学都是使用c#代码来完成,但如果使用触发器,可以方便的解决这一问题。
一、使用触发器,同时删除两个表中的数据,实例如下:
CREATE TRIGGER [dbo].[TriggerDeleteBlogs]
ON [dbo].[T_Blog_Categories]
FOR DELETE
AS
BEGIN
SET NOCOUNT ON;
DECLARE @CategoryId INT;
SELECT @CategoryId=CategoryId FROM deleted
DELETE T_Blog_Blogs WHERE CategoryId=@CategoryId
END
二、使用触发器,同时删除两个表中的数据,两个表存在主外键的关系,实例代码如下:
CREATE TRIGGER [dbo].[TriggerDeleteBlogs]
ON [dbo].[T_Blog_Categories]
INSTEAD OF DELETE
AS
BEGIN
SET NOCOUNT ON;
DECLARE @CategoryId INT;
SELECT @CategoryId=CategoryId FROM deleted
DELETE T_Blog_Blogs WHERE CategoryId=@CategoryId
DELETE T_Blog_Categories WHERE CategoryId=@CategoryId
END
注:理解触发器里面的两个临时的表:Deleted , Inserted 。注意Deleted 与Inserted分别表示触发事件的表“旧的一条记录”和“新的一条记录”。
一个成功的例子:
含外键约束触发器
-- =============================================
-- Author: ZHAOWEI
-- Create date: 2011-08-04
-- Description: DelApplicantById
-- =============================================
USE [RPS]
GO
ALTER TRIGGER [dbo].[rps_Triggers_DelApplicantFrmPerson]
ON [dbo].[FrmAddress]
INSTEAD OF DELETE
AS
BEGIN
DECLARE @ID UNIQUEIDENTIFIER
SELECT @ID=Id FROM DELETED
DELETE
FROM [dbo].[FrmPerson]
WHERE [FrmPerson].[FrmAddressFK]=@ID
DELETE
FROM [dbo].[FrmAddress]
WHERE [FrmAddress].[Id]=@ID
END
GO
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端