一、概述

  存储过程(Stored Procedure)是一组为了完成特定功能的SQL 语句集,经编译后存储在数据库。用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。

优点:                                                                                                                                                                           1.由于存储过程是预编译的,在首次运行一个存储过程时,查询优化器对其进行分析、优化,并给出最终被存在系统表中的执行计划,不像解释执行的SQL语句那样在提出操作请求的时候才进行语法分析和优化工作,因而运行效率高,它提供了在服务端快速运行SQL语句的有效途径。

  2.存储过程降低了客户机和服务器之间的通信量,客户机上的应用程序只要通过网络向服务器发出存储过程的名字和参数,就可以让RDBMS执行许多条SQL语句,并执行数据处理,只有最中结果才返回客户端。

  3.存储过程允许标准组件式编程,存储过程在被创建以后可以在程序中被多次调用,而不必重新编写该存储过程的SQL语句。而且数据库专业人员可随时对存储过程进行修改,但对应用程序源代码毫无影响(因为应用程序源代码只包含存储过程的调用语句),从而极大地提高了程序的可移植性。

二、基本语法

1.变量声明

   declare @variable int  或者 @variable int

   多个变量的声明 declare @variable int, @va vachar(10),....     

   区别:declare的含义是定义一个存储过程中使用的变量,而不加declare的是存储过程需要传入的参数,下面一个具体的实例可以看得更清楚:

--创建存储过程
create procedure sl_procedure
@va int --参数声明
as
declare @variable int --变量声明
set @variable=22 --变量赋值
select * from Albums
where ArtistId=@va --执行存储过程
exec sl_procedure 12 --12 为传入的参数

2.变量赋值:  

set @variable=22 --变量赋值

   变量赋值时变量前必须加set

  3.条件控制语句:

if(条件)
begin
--执行语句块
end
else
begin
--执行语句块
end

3.循环控制语句

while(条件)
begin
--执行语句块
end
  

三、实例分析

1.带输入参数的存储过程

--根据专辑名 查找艺术家

--创建存储过程
Create procedure ArtistNameOut1
@albumTitle varchar(20) --参数声明
as
select ar.ArtistName from Artists ar
join Albums al
on ar.ArtistId=al.AlbumId
where al.AlbumTitle=@albumTitle
GO
--执行存储过程
--参数传递方式1,多个参数以 , 号隔开
exec ArtistNameOut1 @albumTitle='Worlds' -- 参数传入
--参数传递方式2,
exec ArtistNameOut1 'Worlds' -- 参数传入

2.带输出参数的存储过程

--根据专辑名 输出艺术家
--创建存储过程
Create procedure ArtistNameOut
@albumTitle varchar(20), --参数声明
@artistName varchar(20) output --输出参数:output标识
as
select @artistName=ar.ArtistName from Artists ar
join Albums al
on ar.ArtistId=al.AlbumId
where al.AlbumTitle=@albumTitle
GO
--执行存储过程
declare @returnName varchar(20)
exec ArtistNameOut 'Worlds',@returnName output -- 参数传入
select @returnName

调用存储过程时需要再声明一个变量,作为output参数

关于调用存储过程传递参数过程中遇到的错误,贴个图记录一下:

  多个参数,参数传递方式必须统一

SQL存储过程笔记的更多相关文章

  1. sql 存储过程笔记3

    16:22 2014/1/26一.定义变量--简单赋值declare @a int set @a = 5 print @a --使用select语句赋值declare @user1 nvarchar( ...

  2. sql 存储过程笔记2

    if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[sys_Page_v2]') and OBJECTPROPE ...

  3. sql 存储过程笔记

    create procedure SP_Wim_GetWorkSubSectionById(@paramId as int)asbegindeclare @id as int;declare @lvI ...

  4. 《软件测试自动化之道》读书笔记 之 SQL 存储过程测试

    <软件测试自动化之道>读书笔记 之 SQL 存储过程测试 2014-09-28 待测程序测试程序   创建测试用例以及测试结果存储  执行T-SQL脚本  使用BCP工具导入测试用例数据  ...

  5. ORACLE存储过程笔记3

    ORACLE存储过程笔记3 流程控制 1.条件   if expression thenpl/sql or sqlend if;   if expression thenpl/sql or sqlel ...

  6. ORACLE存储过程笔记1

    ORACLE存储过程笔记1 一.基本语法(以及与informix的比较)   create [or replace] procedure procedure_name (varible {IN|OUT ...

  7. PL/SQL存储过程编程

    PL/SQL存储过程编程 /**author huangchaobiao *Email:huangchaobiao111@163.com */ PL/SQL存储过程编程(上) 1. Oracle应用编 ...

  8. SQL存储过程分页(通用的拼接SQL语句思路实现)

    多表通用的SQL存储过程分页 案例一: USE [Community] GO /****** Object: StoredProcedure [dbo].[Common_PageList] Scrip ...

  9. SQL存储过程的调用及写法

    调用函数: public class SqlProcess { ; public DataSet ReturnSet = null; public SqlDataAdapter adapter = n ...

随机推荐

  1. 【基础教程】推荐10+必备的 WordPress 常用插件

    1.Akismet Akismet 是 WordPress 官方推荐的一款 WordPress 防垃圾评论插件,也是默认已安装的插件. 2.WP-Postviews 最好的最流行的WordPress浏 ...

  2. thinkphp M 和模板用法

    <?phpnamespace Home\Controller;use Think\Controller;class IndexController extends Controller { pu ...

  3. PHPCMS v9修改栏目或者单页没有权限

    问题: 普通管理员没有权限修改栏目,只有超级管理员才有权限修改,凡是非超级管理员,设置栏目权限后只能添加栏目,不能对栏目进行修改和删除操作,提示您没有权限操作该项这使系统的一个BUG.   一.对于普 ...

  4. 【行为型】Chain of responsibility模式

    职责链模式将对象的请求处理组成链式结构,并将请求按链式结构逐个传递下去,直接被其中的某个处理者处理为止.由此可知,职责链模式的适用场合是对指定请求,可以有多个请求处理者(或称为请求响应者),但用户并不 ...

  5. CentOS 网络设置修改 指定IP地址 DNS 网关(转)

    CentOS 网络设置修改 指定IP地址 DNS 网关(实测 笔记)   环境: 系统硬件:vmware vsphere (CPU:2*4核,内存2G) 系统版本:Centos-6.5-x86_64 ...

  6. web UI

    Semantic不错的UI,代码非常详细

  7. [LeetCode 120] - 三角形(Triangle)

    问题 给出一个三角形,找出从顶部至底部的最小路径和.每一步你只能移动到下一行的邻接数字. 例如,给出如下三角形: [ [2], [3,4], [6,5,7], [4,1,8,3] ] 从顶部至底部的最 ...

  8. Android中如何利用attrs和styles定义控件

    一直有个问题就是,Android中是如何通过布局文件,就能实现控件效果的不同呢?比如在布局文件中,我设置了一个TextView,给它设置了 textColor,它就能够改变这个TextView的文本的 ...

  9. 【HDOJ】1080 Human Gene Functions

    DP.wa了一下午,原来是把mmax写在外层循环了.最近事情太多了,刷题根本没状态. #include <cstdio> #include <cstring> #include ...

  10. http协议使用实例

    #include <stdio.h>#include <windows.h>#include <wininet.h> #define MAXSIZE 1024#pr ...