zoukankan      html  css  js  c++  java
  • Sql Server触发器的使用

    创建表:

    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

     if else 触发器

    create table employee(emp_id int,emp_name nvarchar(50),gender int,department int,salary numeric(10,2))
    
    create table updated(emp_id int,salary numeric(10,2))
    
    insert into employee values(1,'tom',10,10,6000.00)
    
    insert into updated values(1,6500.00)
    
    
    
    create trigger up_salary on employee INSTEAD OF update 
        as if update (salary) 
        begin
            declare @newSalary numeric(10,2)
            declare @oldSalary numeric(10,2)
            select  @newSalary = salary from updated
            select @oldSalary = salary from employee where emp_id = (select emp_id from updated)
            if @newSalary > @oldSalary * 1.1 
                print '工资变动不能超过原来工资的10%'
            else
                update employee set salary = @newSalary where emp_id = (select emp_id from updated)
        end
    go
  • 相关阅读:
    《20170920-构建之法:现代软件工程-阅读笔记1》
    结对-贪吃蛇项目-开发过程
    个人-GIT使用方法
    团队-爬取豆瓣电影TOP250-开发环境搭建过程
    团队-爬取豆瓣电影TOP250-简单团队一阶段互评
    团队-爬虫电影网站-开发文档
    结对-贪吃蛇游戏-结对项目总结
    课后作业-阅读任务-阅读提问
    结对-贪吃蛇游戏-开发环境搭建过程
    结对编程贪吃蛇项目-结对编项目设计文档
  • 原文地址:https://www.cnblogs.com/chenh/p/10303790.html
Copyright © 2011-2022 走看看