您的位置:威尼斯官方网站 > 威尼斯官方网站登录 > 威尼斯官方网站这几个程序段存款和储蓄在服务

威尼斯官方网站这几个程序段存款和储蓄在服务

发布时间:2019-08-12 13:24编辑:威尼斯官方网站登录浏览(124)

    一、存款和储蓄进度概述

      SQL Server中的存款和储蓄过程是使用T_SQL编写的代码段。它的意在能够方便的从系统表中查询音信,恐怕完结与创新数据库表相关的管住任务和其他的系统一管理理职务.T_SQL语句是SQL Server数据库与应用程序之间的编制程序接口。在大多气象下,一些代码会被开荒者重新编写多次,倘若老是都编写制定同样作用的代码,不但繁琐,并且便于出错,并且由于SQL Server逐个的实施语句会收缩系统的运作功效。

      简单来说,存款和储蓄进程就是SQL Server为了实现特定职分,而将部分急需每每调用的定势操作语句,或许有个别事情过于繁琐,须要编写制定大量逻辑和询问,严重影响程序品质,编写成程序段,那么些程序段存款和储蓄在服务器上,有数据库服务器通进程序来调用。

     

    二、存储进程的长处

    1. 仓库储存进度加速系统运行速度,存款和储蓄进度只在创马上编写翻译,以往每一趟实行时无需再一次编写翻译。
    2. 积存进程能够打包复杂的数据库操作,简化操作流程,譬如对多个表的翻新,删除等。
    3. 可达成模块化的主次设计,存款和储蓄进程能够屡次调用,提供统一的数据库访谈接口,创新应用程序的可维护性。
    4. 仓库储存进度可以扩张代码的安全性,对于用户无法一贯操作存款和储蓄进度中援引的对象,SQL  Server能够设定用户对点名存款和储蓄进程的执行权限。
    5. 积累进度能够减低互连网流量,存款和储蓄进程代码直接存款和储蓄于数据库中,在客户端与服务器的通讯进度中,不会生出大批量的T_SQL代码流量。

     

    三、存款和储蓄进度分类

    1.种类存储进程

      系统存款和储蓄进程是 SQL Server系统本身提供的积存进度,能够看做命令试行各个操作。

      系统存款和储蓄进程主要用于从系统表中获取新闻,使用系统存款和储蓄进度一呵而就数据库服务器的管理专门的学业,为系统助理馆员提供帮衬,为用户查看数据库对象提供方便,系统存款和储蓄进程位于数据库服务器中,何况以sp_开头,系统存款和储蓄过程定义在系统定义和用户定义的数据库中,在调用时不要在存款和储蓄进度前增加少库限定名。比方:sp_rename系统存款和储蓄进程能够修改当前数据库中用户成立对象的称呼,sp_helptext存款和储蓄进度能够来得法则,暗许值或视图的公文音信,SQL SEXC60VER服务器中众多的管理职业都是通过执行系统存款和储蓄进度来产生的,好些个种类音信也足以经过进行系统存款和储蓄进度来博取。

      系统存款和储蓄进程创造并贮存在与系统数据库master中,一些种类存款和储蓄进度只能由系统助理馆员使用,而有一些系统存款和储蓄进度通过授权能够被其它用户所使用。

    2.用户存款和储蓄进程(自定义存款和储蓄过程)

      自定义存款和储蓄进度即用户使用T_SQL语句编写的、为了促成某一特定业务需要,在用户数据库中编辑的T_SQL语句集合,自定义存储过程能够承受输入参数、向客户端再次回到结果和音信,再次回到输出参数等。创设自定义存款和储蓄进程时,存款和储蓄进程名前加上"##"表示创制了二个大局的权且存款和储蓄进度;存储进度后面加上"#"时,表示创设的一对偶尔存款和储蓄进度。局地一时存款和储蓄进程只可以在开创它的回复中采用,会话甘休时,将被删除。那三种存款和储蓄进程都存款和储蓄在tempdb数据库中。

    用户定义的存放进度分成两类:T_SQL 和CLR

    T_SQL:仓库储存进度是值保存的T_SQL语句会集,能够承受和再次来到用户提供的参数,存储进程也说不定从数据库向客户端应用程序重回数据。

    CLWrangler存款和储蓄进程是教导用Microsoft.NET Framework公共语言的办法囤积进程,基本上能用和再次来到用户提供的参数,它们在.NET Framework程序集是作为类的公物静态方法达成的。

    3.扩大存储进度

     扩充存储进程是以在SQL SE奥迪Q7VE奥迪Q7情形外推行的动态连接(DLL文件)来贯彻的,能够加载到SQL SE宝马X3VEENVISION实例运营的地方空间中实行,扩大存款和储蓄进度能够用SQL SERubiconVE昂科拉扩张存款和储蓄进度API编制程序,扩充存款和储蓄进程在此之前缀"xp_"来标志,对于用户来讲,扩充存款和储蓄进程和国语存款和储蓄进度同样,可以用同样的不二等秘书诀来实行。 

     

    四、存储进度实际上援引

    1. 创设无参存款和储蓄进程

    --1.创建无参存储过程
    if (exists (select * from sys.objects where name = 'getAllBooks'))
        drop proc proc_get_student
    go
    create procedure getAllBooks
    as
    select * from books;
    --调用,执行存储过程
    exec getAllBooks;
    

     

    2. 修改存款和储蓄过程

    alter procedure dbo.getAllBooks 
    as
    select book_auth from books;
    

     

    3. 刨除存款和储蓄进度

    drop procedure getAllBooks;
    

     

    4. 重命名存款和储蓄进度

    sp_rename getAllBooks,proc_get_allBooks;
    

     

    5. 成立带参数的存放进程,这也是累积进度最常见的款型

    积累进程的参数分为二种:输入参数和输出参数

    输入参数:用于向存款和储蓄进程传入值,类似java语言或则c中的值传递。

    输出参数:用于调用存款和储蓄进程后,参加会议结果,类似java语言的按援用传递。

    值传递和引用传递差别:

    • 基本数据类型赋值属于值传递;援引类型之间赋值属于引用传递。
    • 值传递传递的是的确的变量值;援用传递传递的是目标的援引地址。
    • 值传递后,八个变量改动的是分别的值;援引传递后,七个援用改换的是同三个对象的情景

    5.1)带贰个参数存款和储蓄进程

    if (exists (select * from sys.objects where name = 'searchBooks'))
        drop proc searchBooks
    go
    create proc searchBooks(@bookID int)
    as
        --要求book_id列与输入参数相等
        select * from books where book_id=@bookID;
    --执行searchBooks
    exec searchBooks 1;
    

     

    5.2)带2个参数存款和储蓄进程**

    if (exists (select * from sys.objects where name = 'searchBooks1'))
        drop proc searchBooks1
    go
    create proc searchBooks1(
        @bookID int,
        @bookAuth varchar(20)
    )
    as
        --要求book_id和book_Auth列与输入参数相等
        select * from books where book_id=@bookID and book_auth=@bookAuth;
    exec searchBooks1 1,'金庸';
    

     

    5.3)成立有重回值的积累进度**

    if (exists (select * from sys.objects where name = 'getBookId'))
        drop proc getBookId
    go
    create proc getBookId(
        @bookAuth varchar(20),--输入参数,无默认值
        @bookId int output --输入/输出参数 无默认值
    )
    as
        select @bookId=book_id from books where book_auth=@bookAuth
    --执行getBookId这个带返回值的存储过程
    declare @id int --声明一个变量用来接收执行存储过程后的返回值
    exec getBookId '孔子',@id output
    select @id as bookId;--as是给返回的列值起一个名字
    

     

    5.4)创设带通配符的积累进度**

    if (exists (select * from sys.objects where name = 'charBooks'))
        drop proc charBooks
    go
    create proc charBooks(
        @bookAuth varchar(20)='金%',
        @bookName varchar(20)='%'
    )
    as 
        select * from books where book_auth like @bookAuth and book_name like @bookName;
    --执行存储过程charBooks
    exec  charBooks    '孔%','论%';
    

     

    5.5)加密囤积进程**

    with encryption子句对用户遮蔽存款和储蓄进程的文本.下例创造加密进度,使用 sp_helptext 系统存款和储蓄过程获得有关加密经过的消息,然后尝试直接从 syscomments 表中收获有关该进度的新闻。

    if (object_id('books_encryption', 'P') is not null)
        drop proc books_encryption
    go
    create proc books_encryption 
    with encryption
    as 
        select * from books;
    --执行此过程books_encryption
    exec books_encryption;
    exec sp_helptext 'books_encryption';--控制台会显示"对象 'books_encryption' 的文本已加密。"
    

     

    5.6)不缓存存款和储蓄进度**

    --with  recompile不缓存
    if (object_id('book_temp', 'P') is not null)
        drop proc book_temp
    go
    create proc book_temp
    with recompile
    as
        select * from books;
    go
    
    exec book_temp;
    exec sp_helptext 'book_temp';
    

     

    5.7)创办带游标参数的囤积进度**

    if (object_id('book_cursor', 'P') is not null)
        drop proc book_cursor
    go
    create proc book_cursor
        @bookCursor cursor varying output
    as
        set @bookCursor=cursor forward_only static for
        select book_id,book_name,book_auth from books
        open @bookCursor;
    go
    --调用book_cursor存储过程
    declare @cur cursor,
            @bookID int,
            @bookName varchar(20),
            @bookAuth varchar(20);
    exec book_cursor @bookCursor=@cur output;
    fetch next from @cur into @bookID,@bookName,@bookAuth;
    while(@@FETCH_STATUS=0)
    begin 
        fetch next from @cur into @bookID,@bookName,@bookAuth;
        print 'bookID:' convert(varchar,@bookID) ' , bookName: '  @bookName
                 ' ,bookAuth: ' @bookAuth;
    end
    close @cur    --关闭游标
    DEALLOCATE @cur; --释放游标
    

     

    5.8)创制分页存款和储蓄进程**

    if (object_id('book_page', 'P') is not null)
        drop proc book_page
    go
    create proc book_page(
        @TableName varchar(50),            --表名
        @ReFieldsStr varchar(200) = '*',   --字段名(全部字段为*)
        @OrderString varchar(200),         --排序字段(必须!支持多字段不用加order by)
        @WhereString varchar(500) =N'',  --条件语句(不用加where)
        @PageSize int,                     --每页多少条记录
        @PageIndex int = 1 ,               --指定当前为第几页
        @TotalRecord int output            --返回总记录数
    )
    as
    begin
         --处理开始点和结束点
        Declare @StartRecord int;
        Declare @EndRecord int; 
        Declare @TotalCountSql nvarchar(500); 
        Declare @SqlString nvarchar(2000);    
        set @StartRecord = (@PageIndex-1)*@PageSize   1
        set @EndRecord = @StartRecord   @PageSize - 1 
        SET @TotalCountSql= N'select @TotalRecord = count(*) from '   @TableName;--总记录数语句
        SET @SqlString = N'(select row_number() over (order by '  @OrderString  ') as rowId,' @ReFieldsStr ' from '  @TableName;--查询语句
        --
        IF (@WhereString! = '' or @WhereString!=null)
            BEGIN
                SET @TotalCountSql=@TotalCountSql   '  where '  @WhereString;
                SET @SqlString =@SqlString  '  where '  @WhereString;            
            END
        --第一次执行得到
        --IF(@TotalRecord is null)
        --   BEGIN
               EXEC sp_executesql @totalCountSql,N'@TotalRecord int out',@TotalRecord output;--返回总记录数
        --  END
        ----执行主语句
        set @SqlString ='select * from '   @SqlString   ') as t where rowId between '   ltrim(str(@StartRecord))   ' and '    ltrim(str(@EndRecord));
        Exec(@SqlString)    
    END
    --调用分页存储过程book_page
    exec book_page 'books','*','book_id','',3,1,0;
    
    --
    declare @totalCount int
    exec book_page 'books','*','book_id','',3,1,@totalCount output; 
    select @totalCount as totalCount;--总记录数。
    

     

     

     

    PS:款待扫描下方二维码,出席QQ群

    威尼斯官方网站 1

     

    作者:Jacky

    来源:

    宣示:本文版权归我和和讯共有,迎接转发,但未经小编同意必须保留此段注明,且在篇章页面显明地方给出原版的书文连接,不然保留追究法律权利的职务。

     

    本文由威尼斯官方网站发布于威尼斯官方网站登录,转载请注明出处:威尼斯官方网站这几个程序段存款和储蓄在服务

    关键词:

上一篇:在进行多条件查询时可以

下一篇:没有了