一个简单的存储过程

存储过程实现循环取出以特定字符间隔的字符串的单个字符串
比如:
ab,cdsfd,efdf,owoief,lows
实现存储过程后的结果为:
ab
cdsfd
efdf
owoief
lows

这样就可以对这些数据进行循环执行操作

存储过程:
if exists(select * from sysobjects where name='proc_ids')
drop procedure proc_ids
go
create procedure proc_ids
@num int out,@ids varchar(100) out,@id varchar(10) out
as
  select @num = patindex('%,%',@ids)
  if(@num>0)
    begin
      select @id = substring(@ids,1,@num-1)
      select @ids=substring(@ids,@num+1,len(@ids)-@num)
    end
  else
    begin
      if(LEN(@ids)>0)
        begin
          select @id=@ids
    end
  end


对此存储过程的验证:
declare @num int,@id varchar(10),@ids varchar(100)='ab,cdsfd,efdf,owoief,lows'
while(1=1)
begin
  if(@num=0)
  break
exec proc_ids @num out,@ids out,@id out
select @id
end

最后来说说存储过程的优缺点吧

优点:
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 的中

间层中可能是一个更佳的选择。

转载于:https://www.cnblogs.com/liuxinzhu/archive/2010/05/15/1736342.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/298255.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于事件驱动架构构建微服务第8部分:在应用程序上实现事件溯源

原文链接:https://logcorner.com/building-microservices-through-event-driven-architecture-part8-implementing-eventsourcing-on-application/在本文中,我将讨论应用程序上的事件溯源实现。该层围绕领域并实现用例(特定于应用程序的业务规…

我们来聊点成年人的话题!

1 这个话题透漏着成年人都存在的问题,其中心思想行走在道德底线,让人不得不深思,句句入心2 哈哈哈哈哈哈哈哈哈哈哈哈哈画面惊人 图自动漫次元酱3 对不起,我不是你家的鸡,我是一只大鸟!!&#x…

python3 csv读写_在python3中读取、更新和写入更新的CSV文件

我正在创建一个应用程序来本质上充当一个资产数据库,我试图打开一个CSV文件,读取值并相应地更新它们。我看到很多关于如何读写CSV文件的教程,但是我找不到一个详细介绍如何迭代CSV文件和更新单个值的教程。理想情况下,与列表相比&…

js数字相加

las_number Number(ads) Number(abs),转载于:https://www.cnblogs.com/gengaixue/archive/2011/07/08/2100971.html

js获取int类型长度_js代码比较大小前需要把string转换int

今天在写代码时发现一个容易忽略的问题,写下来以供参考这是做的一个验证,设置的最小值minValue不能小于参数本身的最小值min当输入正数的时候都没有问题,但是输入负数时就出现问题了正确设置参数var minValue -30 ,var min -300 ,console.l…

yum安装最新的 LNMP

2019独角兽企业重金招聘Python工程师标准>>> 先添加几个源: rpm -Uvh http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-1.noarch.rpm rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm 1,安装nginx&a…

JavaScript中encodeURI,encodeURIComponent与escape的注意

大家在使用JS提交数据时,尤其是中文的时候,经常会需要将要提交的字符串进行URL编码。在JS中对字符串进行URL编码有好几种方法,encodeURI,encodeURIComponent,还有escape。在我看到的很多代码中escape这个函数用的最多&…

C#新版本风格项目文件(SDK风格项目 SDK-style project)

在VisualStudio中创建NetCore以上版本的项目,使用的都是新版本风格的项目文件。和旧版本.NetFramework版本的项目文件区别:双击项目可直接打开csproj文件进行编辑配置项目文件内容的改变项目属性文件夹图标更改项目引用去除,改成依赖项Nuget包…

史上最丧心病狂的商品定价套路:如何从数学角度,榨干你身上的每一分钱

全世界只有3.14 % 的人关注了爆炸吧知识世上没有精明的买家,只有精明的卖家。的确,卖家的嘴,骗人的鬼。在买与卖的博弈中,没有一个买家可以取胜。别不信,今天就让你见识下“卖家套路终极奥义”。按量定价,是…

python 接口自动化_Python 接口自动化测试

1. 接口基础知识1.1 接口分类接口一般来说有两种,一种是程序内部的接口,一种是系统对外的接口。(1) webservice接口:走soap协议通过http传输,请求报文和返回报文都是xml格式的,我们在测试的时候都要通过工具才能进行调…

工厂模式 Factory

工厂模式 记得一个好友面试的时候,面试官问他,你怎么获得一个类的对象的好友说,new一个啊,的确没错,对象不是new难道还是create... 当然在使用new对象的时候,这段代码也就意味着难以以后的维护和扩展了&…

java定时器写法_java定时器的写法是什么样?

定时器的用法是java核心基础之一,很多特殊功能都需要用到定时器,下面一起来看看定时器是如何编写的吧。示例:一个具备周期性定时(毫秒级);单时刻定时(秒级);多时刻定时(秒级)。后两个时间的设置必须符合“yyyy-MM-ddHH:mm:ss”、“yyyy-MM-dd…

CentOS中vsftp安装、配置、卸载

CentOS中vsftp安装、配置、卸载转载http://www.zjgsq.com/1509.html转载于:https://blog.51cto.com/bbtao/1606816

struts2文件上传

/*** 单文件的上传* author Administrator**/public class FileUploadAction extends ActionSupport {private static final com.opensymphony.xwork2.util.logging.Logger logger LoggerFactory.getLogger(FileUploadAction.class);//上传文件private File upload;//保存路径…

python的所有库_Python 常用库

前言之前重写了视频字符画处理的代码,然后这两天又在研究命令行和网络。读了一点开源工具的代码,越来越觉得有必要针对性地学习一下一些重要的基础库。这里呢就列个小清单,把我认为有必要学习的库写一下。带 [ x ] 的表示已完成时间time&…

401 Palindrome

这道题最初我是没理解清楚题意,我以为那些reverse栏空白的字母是省略了.后来在这个论坛找到了更多的测试数据,发现了自己理解错了,重新读题 ,修改了下代码- -.弄了很久才AC 我的思路和别人有点不同的是,我是通过计算来得到在常量表中的位置 好吧 这道题本来该总结很多的,今天…

东北大姐剪纸被误认为油画,遭人质疑二十多年,只因太过逼真,看完后:真香!不愧是天下第一剪!...

全世界只有3.14 % 的人关注了爆炸吧知识“这是剪纸?太惟妙惟肖了,我还以为是水彩画呢!”这是一位网友的留言。茂盛的树木、潺潺的流水……这些栩栩如生的场景,真难想象竟是出自,一双巧手和一把剪刀。这些作品,全部来自…

2021 年 9 月 TIOBE 指数 C# 同比增长突破 1.2%

TIOBE 编程社区指数是编程语言流行程度的指标。该指数每月更新一次。评级基于全球熟练工程师、课程和第三方供应商的数量。谷歌、必应、雅虎、维基百科、亚马逊、YouTube 和百度等流行搜索引擎用于计算评分。C# 近期发展状态不错,依旧在榜单中排第五,但排…

java基础面向对象_java基础面向对象

一、面向对象之封装1. 面向对象的三个特征是:封装、继承和多态。2. Java开发过程:要实现某个功能,首先要找能够实现这个功能的对象,如果没有找到,就自己造一个对象,将要实现的功能定义到对象中,…

linux 学习笔记 显示压缩文件 gong.zip 的文件内容

#zip -v gong zip zip info: xxx >删除压缩文件中俄smart.txt 文件 #zip -d gong.zip smart.txt deleting:smart.txt >向压缩文件中gong.zip中添加rpm_info.txt文件 #zip -m gong.zip ./rpm_info.txt adding:rpm_info.txt deflated 79% Unzip命令解压缩文件 >将gong.z…