zoukankan      html  css  js  c++  java
  • 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 晚安

  • 相关阅读:
    Leetcode 191.位1的个数 By Python
    反向传播的推导
    Leetcode 268.缺失数字 By Python
    Leetcode 326.3的幂 By Python
    Leetcode 28.实现strStr() By Python
    Leetcode 7.反转整数 By Python
    Leetcode 125.验证回文串 By Python
    Leetcode 1.两数之和 By Python
    Hdoj 1008.Elevator 题解
    TZOJ 车辆拥挤相互往里走
  • 原文地址:https://www.cnblogs.com/studydp/p/9027069.html
Copyright © 2011-2022 走看看