1.创建存储过程的基本语法模板:

if (exists (select * from sys.objects where name = 'pro_name'))drop proc pro_name
go
create proc pro_name@param_name param_type [=default_value]
as
begin    sql语句
end

ps:[]表示非必写内容。sys.objects存储的是本数据库中的信息,不仅仅存储表名,还有存储过程名 、视图名、触发器等等。

例如:

 1 if (exists (select * from sys.objects where name = 'USP_GetAllUser'))2     drop proc USP_GetAllUser3 go4 create proc USP_GetAllUser5 @UserId int =16 as 7 set nocount on;8 begin9     select * from UserInfo where Id=@UserId
10 end

ps:SQL Server 实用工具将 GO 解释为应将当前的 Transact-SQL 批处理语句发送给 SQL Server 的信号。当前批处理语句是自上一 GO 命令后输入的所有语句,若是第一条 GO 命令,则是从特殊会话或脚本的开始处到这条 GO 命令之间的所有语句。

2.调用方法:

exec dbo.USP_GetAllUser 2;

ps:一般在执行存储过程是,最好加上架构名称,例如 dbo.USP_GetAllUser 这样可以可以减少不必要的系统开销,提高性能。 因为如果在存储过程名称前面没有加上架构名称,SQL SERVER 首先会从当前数据库sys schema(系统架构)开始查找,如果没有找到,则会去其它schema查找,最后在dbo架构(系统管理员架构)里面查找。

3.查看本数据库中存在的存储过程

依次展开数据库、可编程性、存储过程,即可看到已创建的存储过程。

4.修改存储过程

alter proc proc_name
assql语句

5.存储过程中的输出参数的使用

 1 if (exists(select * from  sys.objects where name='GetUser'))2     drop proc GetUser3 go 4 create proc GetUser5     @id int output,6     @name varchar(20) out7 as 8 begin 9     select @id=Id,@name=Name from UserInfo where Id=@id
10 end
11 s
12 go
13 declare
14 @name varchar(20),
15 @id int;
16 set @id=3;
17 exec dbo.GetUser @id,@name out;
18 select @id,@name;
19 print Cast(@id as varchar(10))+'-'+@name;

ps:参数output为该参数可以输出

6.分页获取数据的存储过程

 1 if (exists(select * from  sys.objects where name='GetUserByPage'))2     drop proc GetUserByPage3 go 4 create proc GetUserByPage5     @pageIndex int,6     @pageSize int7 as 8 declare 9 @startIndex int,
10 @endIndex int;
11 set @startIndex =  (@pageIndex-1)*@pageSize+1;
12 set @endIndex = @startIndex + @pageSize -1 ;
13 begin
14     select Id,Name from
15     (
16         select *,row_number()over (order by Id)as number from UserInfo
17     )t where t.number>=@startIndex and t.number<=@endIndex
18 end
19
20 go
21 exec dbo.GetUserByPage 2,4;

7.存储过程中事务的创建

if (exists(select * from  sys.objects where name='JayJayToTest'))drop proc JayJayToTest
go
create proc JayJayToTest@GiveMoney int,@UserName nvarchar(20)
as
beginset nocount on;begin tran;begin tryupdate BankTest set Money = Money-@GiveMoney where Name=@UserName;update BankTest set Money = Money+@GiveMoney where Name='test';commit;end try    begin catch        rollback tran;print ('发生异常,事务进行回滚');end catch
end
go
exec JayJayToTest 10,'jayjay

8.了解存储过程的执行计划

SELECT * FROM sys.[syscacheobjects]查看当前缓存的执行计划

如果执行存储过程时成功通过解析阶段,则 Microsoft SQL Server 查询优化器将分析存储过程中的 Transact-SQL 语句并创建一个执行计划。执行计划描述执行存储过程的最快方法,所依据的信息包括:

1.表中的数据量。

2.表的索引的存在及特征,以及数据在索引列中的分布。

3.WHERE 子句条件所使用的比较运算符和比较值。

4.是否存在联接以及 UNION、GROUP BY 和 ORDER BY 关键字。

查询优化器在分析完存储过程中的这些因素后,将执行计划置于内存中。分析存储过程和创建执行计划的过程称为编译。优化的内存中的执行计划将用来执行该查询。执行计划将驻留在内存中,直到重新启动 SQL Server 或其他对象需要存储空间时为止。如果随后执行了存储过程,而现有执行计划仍留在内存中,则 SQL Server 将重用现有执行计划。如果执行计划不再位于内存中,则创建新的执行计划。

重新编译执行计划(create proc JayJayToTest with recompile)

创建存储过程时在其定义中指定 WITH RECOMPILE 选项,表明 SQL Server 将不对该存储过程计划进行高速缓存;该存储过程将在每次执行时都重新编译。当存储过程的参数值在各次执行间都有较大差异,导致每次均需创建不同的执行计划时,可使用 WITH RECOMPILE 选项。此选项并不常用,因为每次执行存储过程时都必须对其进行重新编译,这样会使存储过程的执行变慢。

由于数据库的新状态,数据库内的某些更改可能会导致执行计划效率低下或不再有效。SQL Server 检测这些使执行计划无效的更改,并将计划标记为无效。此后,必须为执行查询的下一个连接重新编译新的计划。导致计划无效的情况包括:

1.对查询所引用的表或视图进行任何结构更改(ALTER TABLE 和 ALTER VIEW)。
  2.通过语句(如 UPDATE STATISTICS)显式生成或者自动生成新的分发内容统计。
  3.除去执行计划所使用的索引。
  4.显式调用 sp_recompile。
  5.对键的大量更改(其他用户对由查询引用的表使用 INSERT 或 DELETE 语句所产生的修改)。
  6.对于带触发器的表,inserted 或 deleted 表内的行数显著增长。

SQL Server 创建存储过程相关推荐

  1. SQL Server创建存储过程

    什么是存储过程? q 存储过程(procedure)类似于C语言中的函数 q 用来执行管理任务或应用复杂的业务规则 q 存储过程可以带参数,也可以返回结果 q 存储过程可以包含数据操纵语句.变量.逻辑 ...

  2. [翻译]使用C#创建SQL Server的存储过程(Visual Studio 2005 + SQL Server 2005)

    原文地址:http://www.dotnetbips.com/articles/70eff218-3da0-4f6f-8f8d-eeea65193f2c.aspx[原文×××] [翻译]使用C#创建S ...

  3. SQL Server 2008 存储过程,带事务的存储过程(创建存储过程,删除存储过程,修改存储过...

    SQL Server 2008 存储过程,带事务的存储过程(创建存储过程,删除存储过程,修改存储过   存储过程 创建存储过程 use pubs --pubs为数据库 go create proced ...

  4. SQL Server分页存储过程实践(图解)

    下面来对SQL Server分页存储过程进行一下实做.图解成功的各个步骤. 一 找到大数据量的示例表 分页都是针对大记录数的表:反之有大记录数的表,可能就需要分页.例如银行用户表,就会上千万.下面先做 ...

  5. SQL Server中的CLR编程——用.NET为SQL Server编写存储过程和函数

    很早就知道可以用.NET为SQL Server2005及以上版本编写存储过程.触发器和存储过程的,不过之前开发的系统要么因为历史原因用的是SQL2000要么根本用不着在SQL Server中启用CLR ...

  6. 实验8 SQL Server 的存储过程

    实验8 SQL Server 的存储过程 一.实验目的 1.掌握使用T-SQL编程的方法 2.掌握使用T-SQL语句创建一个存储过程并验证 3.掌握创建和执行带参数的存储过程 4.熟练使用系统存储过程 ...

  7. SQL Server编写存储过程小工具(三)

    SQL Server编写存储过程小工具  功能:为给定表创建Update存储过程  语法: sp_GenUpdate <Table Name>,<Primary Key>,&l ...

  8. SQL Server数据库存储过程——以自定义存储过程为例

    SQL Server数据库存储过程--以自定义存储过程为例 1.什么是数据库存储过程 存储过程就是预编译SQL语句的集合,这些语句存储在一个名称下并作为一个单元处理.存储过程代替了传统的逐条执行SQL ...

  9. VB实现SQL Server 2000存储过程调用

    VB实现SQL Server 2000存储过程调用 幸运好时机,注册赢手机 2005 三星yepp夏季数码旅游风 [文章信息] 作者: 刘兴权 陈奇 吴兵 刘雪松 时洪飞 时间: 2005-05-19 ...

最新文章

  1. oracle中执行动态sql语句吗,oracle中有没有可动态执行sql语句的函数
  2. 基于网络音频的Android播放程序简单示例
  3. ROS系统 创建工作空间与功能包
  4. 通过修改Tomcat配置,解决乱码问题
  5. mannachar(马拉车)求最长回文子串
  6. 香港政府活用无人机,正式应用到调研检测领域
  7. 最近ubuntu+gpu装机记录
  8. Js中去除数组中重复元素的4种方法
  9. 云班课资源自动下载详细教程
  10. Skype国际版下载方法
  11. im即时通讯源码(软件)支持封装APP和H5开源php版
  12. 温州商学院计算机二级office考试时间,全国计算机二级最新报名通知,注意报名时间,千万别错过!...
  13. java中solr的面试题_SOlR面试题
  14. win10进不去计算机配置,Win10电脑系统设置打不开的解决方法
  15. 教大家怎么把百度网盘的分享链接共享出来
  16. iTunes历史各个版本下载地址
  17. win10 更改中文用户名为英文
  18. 牛客寒假算法集训营1 小a与军团模拟器(启发式合并)
  19. matlab单位函数定义,MATLAB 函数(一)
  20. CES2018,三星为何将MicroLED应用于电视而非手机?

热门文章

  1. AI基础:Numpy简易入门
  2. 集合数百个常用工具类集合,V2.3.10.104
  3. 近期期刊制作组的工作计划
  4. Gitlab自动触发Jenkins构建打包
  5. 你成为不了架构师的原因!!!
  6. 用c#开发微信 系列汇总
  7. 博客No.1活动暂停公告
  8. 浅析IT软件项目团队人力资源管理
  9. 剑指 Offer 29. 顺时针打印矩阵
  10. jquery中$运算符的后代选择器