存储过程的优缺点是什么


Posted in 面试题 onJanuary 10, 2015
优点:
1.由于应用程序随着时间推移会不断更改,增删功能,T-SQL过程代码会变得更复杂,StoredProcedure为封装此代码提供了一个替换位置。
2.执行计划(存储过程在首次运行时将被编译,这将产生一个执行计划-- 实际上是 Microsoft SQL Server为在存储过程中获取由 T-SQL 指定的结果而必须采取的步骤的记录。)缓存改善性能。
……..但sql server新版本,执行计划已针对所有 T-SQL 批处理进行了缓存,而不管它们是否在存储过程中,所以没比较优势了。
3.存储过程可以用于降低网络流量,存储过程代码直接存储于数据库中,所以不会产生大量T-sql语句的代码流量。
4.使用存储过程使您能够增强对执行计划的重复使用,由此可以通过使用远程过程调用 (RPC) 处理服务器上的存储过程而提高性能。RPC 封装参数和调用服务器端过程的方式使引擎能够轻松地找到匹配的执行计划,并只需插入更新的参数值。
5.可维护性高,更新存储过程通常比更改、测试以及重新部署程序集需要较少的时间和精力。
6.代码精简一致,一个存储过程可以用于应用程序代码的不同位置。
7.更好的版本控制,通过使用 Microsoft Visual SourceSafe 或某个其他源代码控制工具,您可以轻松地恢复到或引用旧版本的存储过程。
8.增强安全性:
a、通过向用户授予对存储过程(而不是基于表)的访问权限,它们可以提供对特定数据的访问;
b、提高代码安全,防止 SQL注入(但未彻底解决,例如,将数据操作语言--DML,附加到输入参数);
c、SqlParameter 类指定存储过程参数的数据类型,作为深层次防御性策略的一部分,可以验证用户提供的值类型(但也不是万无一失,还是应该传递至数据库前得到附加验证)。
缺点:
1.如果更改范围大到需要对输入存储过程的参数进行更改,或者要更改由其返回的数据,则您仍需要更新程序集中的代码以添加参数、更新 GetValue() 调用,等等,这时候估计比较繁琐了。
2.可移植性差
由于存储过程将应用程序绑定到 SQL Server,因此使用存储过程封装业务逻辑将限制应用程序的可移植性。如果应用程序的可移植性在您的环境中非常重要,则将业务逻辑封装在不特定于 RDBMS 的中间层中可能是一个更佳的选择。

Tags in this post...

面试题 相关文章推荐
Java 中访问数据库的步骤?Statement 和PreparedStatement 之间的区别?
Jun 05 面试题
什么是典型的软件三层结构?软件设计为什么要分层?软件分层有什么好处?
Mar 14 面试题
请编写一个 C 函数,该函数在给定的内存区域搜索给定的字符,并返回该字符所在位置索引值
Sep 15 面试题
怎样从/向数据文件读/写结构
Nov 23 面试题
函数只定义了一次, 调用了一次, 但编译器提示非法重定义了-什么问题?
Oct 03 面试题
SQL语言面试题
Aug 27 面试题
.net笔试题
Mar 03 面试题
Linux如何命名文件--使用文件名时应注意
May 29 面试题
为什么需要版本控制?
Aug 08 面试题
Math.round(11.5)等於多少? Math.round(-11.5)等於多少?
Jan 27 面试题
J2EE相关知识面试题
Aug 26 面试题
Promise面试题详解之控制并发
May 14 面试题
DBA数据库管理员JAVA程序员架构师必看
Feb 07 #面试题
介绍一下SQL Server里面的索引视图
Jul 31 #面试题
一组SQL面试题
Feb 15 #面试题
SQL Server里面什么样的视图才能创建索引
Apr 17 #面试题
第一范式(1NF)、第二范式(2NF)和第三范式(3NF)之间的区别是什么?
Apr 28 #面试题
介绍一下sql server的安全性
Aug 10 #面试题
汇智创新科技发展有限公司
Dec 06 #面试题
You might like
php 正则表达式小结
2009/08/31 PHP
PHP clearstatcache()函数详解
2010/03/02 PHP
WordPress的文章自动添加关键词及关键词的SEO优化
2016/03/01 PHP
CI框架常用函数封装实例
2016/11/21 PHP
jQuery 学习第六课 实现一个Ajax的TreeView
2010/05/17 Javascript
ExtJs默认的字体大小改变的几种方法(自己整理)
2013/04/18 Javascript
一个JavaScript用逗号分割字符串实例
2014/09/22 Javascript
JavaScript异步加载浅析
2014/12/28 Javascript
jQuery form插件之formDdata参数校验表单及验证后提交
2016/01/23 Javascript
AngularJS中如何使用$http对MongoLab数据表进行增删改查
2016/01/23 Javascript
mvc中form表单提交的三种方式(推荐)
2016/08/10 Javascript
JS实现的简易拖放效果示例
2016/12/29 Javascript
JS 实现随机验证码功能
2017/02/15 Javascript
关于bootstrap日期转化,bootstrap-editable的简单使用,bootstrap-fileinput的使用详解
2017/05/12 Javascript
angular动态删除ng-repaeat添加的dom节点的方法
2017/07/20 Javascript
使用vue如何构建一个自动建站项目
2018/02/05 Javascript
Vue 按键修饰符处理事件的方法
2018/05/04 Javascript
vue安装遇到的5个报错及解决方法
2019/06/12 Javascript
微信小程序wx.request拦截器使用详解
2019/07/09 Javascript
layui下拉列表select实现可输入查找的方法
2019/09/28 Javascript
JavaScript实现鼠标移入随机变换颜色
2020/11/24 Javascript
[30:55]完美世界DOTA2联赛PWL S2 Magma vs LBZS 第二场 11.18
2020/11/18 DOTA
[35:39]完美世界DOTA2联赛PWL S2 FTD.C vs Rebirth 第二场 11.22
2020/11/24 DOTA
python判断图片宽度和高度后删除图片的方法
2015/05/22 Python
在Python中移动目录结构的方法
2016/01/31 Python
MAC中PyCharm设置python3解释器
2017/12/15 Python
python 获得任意路径下的文件及其根目录的方法
2019/02/16 Python
PyCharm 2020.2下配置Anaconda环境的方法步骤
2020/09/23 Python
优衣库澳大利亚官网:UNIQLO澳大利亚
2017/01/18 全球购物
澳大利亚领先的在线美容商店:Facial Co
2017/10/22 全球购物
萨克斯第五大道英国:Saks Fifth Avenue英国
2019/04/01 全球购物
迪士尼西班牙官方网上商店:ShopDisney西班牙
2020/02/02 全球购物
Java里面StringBuilder和StringBuffer有什么区别
2016/06/06 面试题
中专生求职自荐信范文
2013/12/22 职场文书
咖啡店创业计划书范文
2014/09/15 职场文书
R9700摩机记
2022/04/05 无线电