龙空技术网

SQL Server 存储过程的总结精简版

IT农民 892

前言:

眼前兄弟们对“sql存储过程怎么写”都比较讲究,我们都想要分析一些“sql存储过程怎么写”的相关资讯。那么小编在网络上收集了一些对于“sql存储过程怎么写””的相关内容,希望同学们能喜欢,看官们一起来学习一下吧!

实际开发中遇到了复杂SQL查询,使用jpa无法实现关联内联视图,所以想到动态在数据库中拼接SQL

先来说说使用存储过程的缺点:

数据库移植不方便,存储过程依赖与数据库管理系统, SQL Server 存储过程中封装的操作代码不能直接移植到其他的数据库管理系统中。

不支持面向对象的设计,无法采用面向对象的方式将逻辑业务进行封装,甚至形成通用的可支持服务的业务逻辑框架.

代码可读性差,不易维护。不支持集群。

优点:

存储过程加快系统运行速度,存储过程只在创建时编译,以后每次执行时不需要重新编译。

存储过程可以封装复杂的数据库操作,简化操作流程,例如对多个表的更新,删除等。

可实现模块化的程序设计,存储过程可以多次调用,提供统一的数据库访问接口,改进应用程序的可维护性。

存储过程可以增加代码的安全性,对于用户不能直接操作存储过程中引用的对象,SQL Server可以设定用户对指定存储过程的执行权限。

存储过程可以降低网络流量,存储过程代码直接存储于数据库中,在客户端与服务器的通信过程中,不会产生大量的T_SQL代码流量。

准备测试数据

创建存储过程(无参):

gocreate procedure getAllBooksasselect * from books;--调用,执行存储过程exec getAllBooks;

修改存储过程:

alter procedure dbo.getAllBooksas select book_auth from books;

删除:

drop procedure getAllBooks;

创建存储过程(有参):

gocreate 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,'金庸';

创建有返回值的存储过程:

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

标签: #sql存储过程怎么写