开发者社区> 技术小胖子> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

网络工作室暑假后第二次培训资料(SQLServer存储过程和ADO.NET访问存储过程)整理(一)

简介:
+关注继续查看

因为昨天我的SQL Server 2008数据库在使用的时候突然就打不开了。而起前天还用它来写T-SQL语句来着。所以很是郁闷啊,到网上查询以后,不能解决,就干脆重新安装了一边,所以昨天整理的内容不能够及时的更新到博客上,只能今天继续整理,然后更新了。

这次主要是讲ADO.NET访问存储过程的知识,所以,在开篇的时候还是把SQL Server存储过程的知识给串讲,复习一下。

对于前段程序开发人员来说,存储过程是很重要的工具,他可以使开发者在不了解表架构的情况下使用存储过程对数据进行处理。同时,由于存储过程具有封装的概念,当逻辑规则改变时,可以在不影响前端程序设计的情况下对后端程序进行修改。

存储过程包括视图的所有的优点,视图只有select命令,而存储过程则包含了几乎所有的T-Sql命令。
存储过程可以很大的提高T-SQl命令的执行效率。
T-Sql语句在SQl Server 客户端执行的过程:

每次执行时都需要分析语句正确与否,优化与编译成执行计划,再对照SQl Server中是否有相同的执行计划。


一般的T-SQl命令重复执行时,会一直执行同样的分析,最优化,编译的工作,将耗费大量的CPU时间。

而是用存储过程则是只进行一次分析,优化,编译的过程,之后就直接依照SqlServer缓存中的执行计划直接执行。

优点:减少网络带宽的占用:因为存储过程是在SqlServer端执行,不需要和前端进行来回的沟通,相比之下就减少了在网络上传递包的带宽占用量,对于网络程序执行来说,使用存储过程能够减少对网络带宽的占用。

SqlServer存储过程的声明方式:

Create  proc存储过程名称

As

T-sql命令

SqlServer存储过程分为无参数存储过程和有参数存储过程

1)没有参数的存储过程

调用存储过程

Exec  存储过程名称;

这样的用法和视图差不多,但是视图不可以使用order by命令。而存储过程没有这样的限制。

示例1-1代码如下:



  1. --创建不带参数的存储过程

  2. create proc select_activity

  3. as

  4. --该存储过程所执行的sql命令

  5. select * from T_Activity;

SQL调用该存储过程



  1. --调用select_activity存储过程

  2. exec select_activity


有参数的存储过程

主要有三种类型的参数:

1)输入参数2)输出参数3)返回值

输入参数即在调用这个存储过程之前必须输入参数而该参数仅在程序中使用,并不会再返回给用户

基本的声明方式:

Create proc  存储过程名称

@输入参数名称1  数据类型,

@输入参数名称2  数据类型

As

T-sql命令

如果存在多个参数,就需要在各个输入参数间以逗号分隔 。如果参数是字符串或者日期,则需要用单引号括起来,而数字则不用。

备注:

存储过程通常不要编写太长,因为存储过程是在数据库端执行的,太长的话会影响执行效率;

示例1-2代码如下



  1. --创建带参数的存储过程

  2. create proc select_activity1

  3. --修改存储过程的语句

  4. --alter proc select_activity1

  5. --声明参数,多个参数有“,”号分隔符隔开,参数后面声明该参数的数据类型

  6. @id int,

  7. @activityName nvarchar(50)

  8. as

  9. --该存储过程所执行的Sql命令

  10. select * from T_Activity where id=@id and activityName=@activityName;

  11. --调用带参数的存储过程

  12. --如果参数是字符串或者日期,则需要用单引号括起来,而数字则不用。

  13. exec select_activity1 5,'比武招亲'

  14. --或者

  15. exec select_activity1

  16. @id=1,

  17. @activityName='比武招新';



存储过程中可以包含一些简单的编程语句

比如:if ,begin  ·····end····等语句

示例1-3代码如下:




  1. --在设置参数时,如果需要给设置的参数赋值,则在声明的参数后面加“=”后面跟所设置的初始值,这里设置的初始值为空

  2. create proc sele_activity

  3. @id int=null,

  4. @activityInfoId int=null

  5. as

  6. --使用的if语句来判断输入的参数值是否为空,如果为空则返回前端错误信息“请输入参数”,而且使用return立刻结束该存储过程

  7. if @id isnullor @activityInfoId isnull

  8. begin

  9.        raiserror('请输入参数',16,1)

  10. return

  11. end

  12. --执行的sql命令

  13. select * from T_Activity where id=@id or activityInfoId=@activityInfoId;

  14. --使用了没有给参数赋值的存储过程,返回错误

  15. --错误信息:“消息 50000,级别 16,状态 1,过程 sele_activity,第 7 行 请输入参数”

  16. exec sele_activity;

  17. --这样调用返回正确的结果

  18. exec sele_activity

  19. @id=2,

  20. @activityInfoId=8;


输出参数的存储过程

输出参数和输入参数刚好相反,输入参数只会在as一下活动,而输出参数则返回前端使用

输出参数的声明过程:

Createproc存储过程名称

@输入参数名称   数据类型

@输出参数名称   数据类型  output

As

T-Sql命令

在声明输出参数变量时,必须声明为output,存储过程执行完成以后会将输出参数返回前端

示例1-4代码如下:




  1. --创建select_MathResult的存储过程

  2. create proc select_MathResult

  3. --声明输出参数@activityName和参数的类型

  4. @activityName nvarchar(50),

  5. --声明输出参数,并使用output来表明该参数为输出参数

  6. @result intoutput

  7. as

  8. --使用T-SQL语句来返回相同activityName的数据行数

  9. select @result=count(*) from T_Activity where activityName=@activityName

  10. --调用存储过程,调用时先声明接受输出参数的参数@answer和该参数的类型

  11. declare @answer int

  12. exec select_MathResult '比武招亲' ,@answer output

  13. select'结果是',@answer

这样就完成了对Sql Server存储过程的复习,在下一篇文章将要介绍怎样使用ADO.NET访问存储过程。文章地址:http://yisuowushinian.blog.51cto.com/4241271/1016527




     本文转自yisuowushinian 51CTO博客,原文链接:http://blog.51cto.com/yisuowushinian/1016524,如需转载请自行联系原作者




版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
vc++中,用ado执行sql server存储过程,并且取得返回值的例子
vc++中,用ado执行sql server存储过程,并且取得返回值的例子
0 0
C# 中的数据库操作~存储过程篇Mysql SqlServer
C# 中的数据库操作~存储过程篇Mysql SqlServer
0 0
sqlserver中常用的几个存储过程
sqlserver中常用的几个存储过程
0 0
sqlserver存储过程
sqlserver存储过程
0 0
sqlserver中常用的几个存储过程
sqlserver中常用的几个存储过程
0 0
sqlserver存储过程
sqlserver存储过程
0 0
sqlserver数据库还原存储过程脚本
sqlserver数据库还原存储过程脚本
0 0
sqlserver 存储过程中使用临时表到底会不会导致重编译
原文:sqlserver 存储过程中使用临时表到底会不会导致重编译 曾经在网络上看到过一种说法,SqlServer的存储过程中使用临时表,会导致重编译,以至于执行计划无法重用,运行时候会导致重编译的这么一个说法,自己私底下去做测试的时候,根据profile的跟踪结果,存储过程中使用临时表,如果不是统...
592 0
sql server 查询某个表被哪些存储过程调用
原文:sql server 查询某个表被哪些存储过程调用 sql server 查询某个表被哪些存储过程调用 select distinct object_name(id) from syscomments where id in (select id from sysobjects whe...
577 0
mssql sqlserver 批量删除所有存储过程的方法分享
原文:mssql sqlserver 批量删除所有存储过程的方法分享 转自:http://www.maomao365.com/?p=6864 摘要: 下文讲述采用sql脚本批量删除所有存储过程的方法,如下所示: 实验环境:sqlserver 2008 R2 平常使用sql脚本,删除...
570 0
文章
问答
文章排行榜
最热
最新
相关电子书
更多
容器技术在千万用户级企业的实践及网络方案优化
立即下载
微信客户端怎样应对弱网络
立即下载
思科软件定义访问:实现基于业务意图的园区网络
立即下载