Sq lServer触发器的使用

创建表:

CREATE TABLE [dbo].[GeneralRule](
    [ID] [int] NOT NULL,
    [GeneralRuleName] [nvarchar](50) NULL,
    [DeleteFlag] [int] NOT NULL
)


CREATE TABLE [dbo].[DetailRule](
    [ID] [int] NOT NULL,
    [DetailRuleName] [nvarchar](50) NULL,
    [ParentId] [int] NULL,
    [DeleteFlag] [int] NOT NULL,
)

CREATE TABLE [dbo].[DetailRule_bak](
    [ID] [int] NOT NULL,
    [DetailRuleName] [nvarchar](50) NULL,
    [ParentId] [int] NULL,
    [DeleteFlag] [int] NOT NULL,
)

创建触发器:

--增加
create trigger  triAddGeneralRule
   on DetailRule
for insert --为什么事件触发
    as 
begin  
    insert into [DetailRule_bak](ID,detailRuleName,ParentId,DeleteFlag)
    select ID,detailRuleName,ParentId,DeleteFlag 
    from INSERTED
end


--删除
create trigger  triDelGeneralRule
   on GeneralRule
for delete --为什么事件触发
    as 
delete DetailRule 
from DetailRule dr,Deleted d 
where dr.parentId=d.ID

--修改
create trigger  triGeneralRule
   on GeneralRule
for update --为什么事件触发
    as 
if update (ID)
begin
    update DetailRule 
    set parentId=i.ID
    from DetailRule dr,Deleted d,Inserted i --2个临时表Deleted和Inserted,分别表示触发事件的旧与新记录
    where dr.parentId=d.ID
end

猜你喜欢

转载自www.cnblogs.com/chenh/p/10303790.html