关于触发器使用(外键)
含主外键关系:
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

浙公网安备 33010602011771号