zoukankan      html  css  js  c++  java
  • 存储过程、触发器、数据完整性

    存储过程、触发器、数据完整性

    By TreeDream

    存储过程

    将需要多次调用以实现某个特定任务的代码段编成一个过程

    创建存储过程

    create procedure exp1
    as
    select *
    from Stock
    Go
    
    exec exp1

     

    带参数的存储过程

    if exists (select name from sysobjects where name ='exp2' and type = 'P')
    drop procedure exp2
    Go
    create procedure exp2 @mno char(8),@mname varchar(50),@mspeci varchar(20)
    as
    insert into Stock(mat_num,mat_name,speci)
    values(@mno,@mname,@mspeci)
    GO
    
    execute exp2 'm030','护套绝缘电线','BVV-35'

     

    带默认输入参数的存储过程

    if exists (select name from sysobjects where name = 'exp3' and type = 'P')
    drop procedure exp3
    GO
    create procedure exp3 @mname varchar(50) = '%绝缘%',@pno char(8) = '20110005'
    as
    select mat_name,speci,prj_name,prj_status
    from Stock,Salvaging,Out_stock
    where Stock.mat_num = Out_stock.mat_num and Salvaging.prj_num = Out_stock.prj_num and mat_name like @mname and Salvaging.prj_num = @pno
    GO
    
    execute exp3
    execute exp3 @pno = '20110002'

     

    带输出参数的存储过程

    if exists (select name from sysobjects where name = 'exp4' and type = 'P')
    drop procedure exp4
    GO
    create procedure exp4 @pn char(8),@sum int output
    as
    select @sum = sum(amount)
    from Out_stock
    where prj_num = @pn
    GO
    
    declare @total int
    execute exp4 '20110002',@total output
    print '总量'+ cast(@total as varchar(20))

     

    修改存储过程

    修改和创建相同alter

     

    删除存储过程

    drop procedure exp4

     

    触发器

    当用户进行插入,删除,更新等数据操作的时候,自动触发所定义的SQL语句

     

    创建触发器

    insert触发器,同时将数据复制到基本表和内存中的Inserted表中

    if exists (select name from sysobjects where name = 'tr1_stock' and type = 'P')
    drop trigger tr1_stock
    GO
    create trigger tr1_stock 
    on Stock
    after insert
    as
    declare @amount int
    select @amount = amount
    from inserted
    if @amount < 1
    Begin
    rollback tran
    raiserror ('amount must be greater than 1!',16,10)
    END
    GO

     

    create trigger tr1_outstock
    on Out_stock
    after insert
    as
    Begin
    declare @m_num char(8),@m_amount int
    select @m_num = mat_num,@m_amount = amount
    from inserted
    update stock
    set amount = amount - @m_amount
    where mat_num = @m_num
    END
    GO

     

    delete触发器:将删除的数据保存于deleted中,SQL语句中还可以引用

    create trigger tr2_stock
    on Stock
    after delete
    as
    Begin
    declare @mat_num char(8)
    select @mat_num = mat_num
    from deleted
    
    delete
    from Out_stock
    where mat_num = @mat_num
    END

     

    update触发器:合并了inserted deleted 触发器

    create trigger tr3_stock
    on Stock
    after update
    as
    declare @amount_new int,@amount_old int,@mat_num char(10)
    select @amount_new = amount,@mat_num = mat_num
    from inserted
    if @amount_new < 1
    Begin
    select @amount_old = amount
    from deleted
    update Stock
    set amount = @amount_old
    where mat_num = @mat_num
    END

     

    数据完整性

    约束

    • 建表的时候:列级完整性约束,表级完整性约束

    • alter table Salvaging
      add constraint PK_salvaging primary key(prj_num)
      
      alter table Salvaging
      add constraint data_check check(start_date<=end_date)
      
      alter table Salvaging
      add constraint DF_salvaging default (0) for prj_status
      
      alter table Salvaging
      drop constraint data_check

    默认值

    默认值对象独立于表

    创建默认值

    create default _Getdate
    as getdate()

    绑定默认值

    sp_bindefault _Getdate, 'Out_stock.get_date'

    解除默认

    sp_unbindefault _Getdate

     

    规则

    check约束是在create table中建立的,规则独立于表

    创建规则

    create rule amount_rule
    as
    @amount>0 and @amount<=100

    绑定和解除规则,删除

    create rule amount_rule
    as
    @amount>0 and @amount<=100
    
    sp_bindrule amount_rule,'Stock.amount'
    sp_unbindrule amount_rule,'Stock.amount'
    
    drop rule amount_rule

     

  • 相关阅读:
    字符串数组 去重 研究
    监听 dom 改变
    清除body 不改变路径 页面信息加载第三方
    使用img标签实现xss的常见方法
    禁止ios浏览器页面上下滚动 (橡皮筋效果)
    遍历 Request.Form.Keys
    selenium-java之使用浏览器打开网页举例
    docker搭建redis
    docker镜像无法删除 Error:No such image:xxxxxx
    连接查询SQL说明举例
  • 原文地址:https://www.cnblogs.com/TreeDream/p/7040845.html
Copyright © 2011-2022 走看看