• 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
  • 相关阅读:
    CSP内容安全策略总结及如何抵御 XSS 攻击
    CORS跨域资源共享总结
    web安全总结
    小知识随手记(八)
    内存泄漏问题总结
    Vue中插槽slot的使用
    Git常用命令、及常见报错处理:You have not concluded your merge (MERGE_HEAD exists)、清理无效的远程追踪分支
    render函数、createElement函数与vm.$slots
    Redis集群(二):Redis的安装
    Shell命令_文件系统常用命令df、du
  • 原文地址:https://www.cnblogs.com/chenh/p/10303790.html
Copyright © 2020-2023  润新知