• SQL server T-SQL存储过程


    简介

       存储过程是由一些SQL语句和控制语句组成的被封装起来的过程,它驻留在数据库中,可以被客户应用程序调用,也可以从另一个过程或触发器调用。它的参数可以被传递和返回。与应用程序中的函数过程类似,存储过程可以通过名字来调用,而且它们同样有输入参数和输出参数

       存储过程的好处

    1.由于数据库执行动作时,是先编译后执行的。然而存储过程是一个编译过的代码块,所以执行效率要比T-SQL语句高。

    2.一个存储过程在程序在网络中交互时可以替代大堆的T-SQL语句,所以也能降低网络的通信量,提高通信速率。

    3.通过存储过程能够使没有权限的用户在控制之下间接地存取数据库,从而确保数据的安全。

    创建存储过程

    CREATE  PROC[EDURE]  存储过程名
        @参数1  数据类型 = 默认值 OUTPUT,
        …… ,
        @参数n  数据类型 = 默认值 OUTPUT
        AS
        SQL语句
    GO
    
    
    1. 只返回单一记录集的存储过程
    CREATE  PROC Newfolder
        AS
         select * from student    
     GO
    exec Newfolder    --调用存储过程

    2.有返回值的存储过程

    create proc insetfile
    @returnrow int output
    as
    insert into F_HSZ(id,FID,UID) select NEWID(),'1','2'
    set @returnrow=1
    go
    
    --调用用带有返回值的存储过程
    declare @returnrow int
    exec insetfile @returnrow OUTPUT
    print @returnrow

    3.有输入参数和输出参数的存储过程

    create proc insetfile
    @id varchar(100)
    @returnrow int output
    as
    declare @Nid varchar(100)   --存储过程声明临时变量
     select @Nid=id from Fole where id=@id
     insert into F_HSZ(id,FID,UID) select NEWID(),'1',@Nid
    set @returnrow=1
    go
    --调用带有输入输出参数的存储过程
    declare @returnrow int
    exec insetfile '20', @returnrow OUTPUT
    print @returnrow

    4.在存储过程中使用事物

    create proc insetfile
    @retunrow int output
    as
    declare @error int =0 --事务中操作的错误记录
    declare @trancount int
     Set  NOCOUNT    ON;  --on表示不返回计数 SET NOCOUNT { ON | OFF }
     Set XACT_ABORT ON; --当执行事务时,如果出错,会将transcation设置为uncommittable状态
    
     print @@trancount
     begin try
        begin tran
       insert into F_HSZ(id,FID,UID) select NEWID(),'1','22'
       insert into F_HSZ(id,FID,UID) select NEWID(),'1',2
       set @retunrow=1
        commit tran
        return @retunrow
     end try
     begin catch
       if xact_state()=-1
       begin
        rollback tran;  --回滚事务
       set @retunrow=0
       return @retunrow
       end
      end catch
    set xact_abort off;
    go
    

    设置 xact_abort on/off , 指定是否回滚当前事务,为on时如果当前sql出错,回滚整个事务,为off时如果sql出错回滚当前sql语句,其它语句照常运行读写数据库

      今天的存储过程就到此为止了!Secret telling smile 晚安

  • 相关阅读:
    Java基础之开发工具Eclipse的使用
    Java基础之身份证验证
    如何理解“程序=算法+数据结构”这句话
    JDBC
    Java与其它语言的比较
    Java整体之JavaEE
    Java项目之项目模板(登录注册)
    二进制
    计算机发展历程
    Spring错误:org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.binding.Bi
  • 原文地址:https://www.cnblogs.com/studydp/p/9027069.html
Copyright © 2020-2023  润新知