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 晚安

  • 相关阅读:
    cocos2d-x 坐标系
    Linux 用户和用户组
    Linux 挂载分区 + swap 分区
    Linux 分区 磁盘分区与格式化
    Linux MBR分区(重点知识)
    Linux -磁盘管理 ip http://blog.csdn.net/xh16319/article/details/17272455
    Linux 底行模式常用命令
    Linux Bash 通配符
    Linux Bash 的基本功能 管道符
    Linux Bash的基本功能 输出重定向
  • 原文地址:https://www.cnblogs.com/studydp/p/9027069.html
Copyright © 2011-2022 走看看