说出来有点丢人,做sqlserver应用系统近一年,竟然没有使用过存储过程,现在就好好的梳理一下对应知识,慢慢让其加入到我的项目中去吧。

存储过程的优点:1、运行效率高,提供了在服务器端快速执行sql语句的有效途径。2、存储过程降低了客户机和服务器之间的通信量。3、方便实施企业规则。

(1)创建存储过程

①创建一个存储过程,查看00005号课程的选修情况,包括选修该课程学生的学号、姓名和成绩。

解答:

USE SM(数据库名称)

GO

CREATE PROCEDURE ssc_3

AS

SELECT Student.SNo,SName,Score

FROM Student LEFT JOIN SC ON Student.SNo=SC.SNo

WHERE SC.SNo='00005'

GO

按F5键,创建成功

②执行存储过程:EXECUTE ssc_3

(2)使用输入参数

①上面建立的存储过程只能对00005号课程的选修情况进行查看,要想对所有课程进行随机查看,需要进行参数的传递

USE SM

GO

CREATE PROCEDURE ssc_4

@cnumber CHAR(5)

AS

SELECT Student.SNo,SName,Score

FROM Student LEFT JOIN SC ON Student.SNo=SC.SNo

WHERE SC.SNo=@cnumber

GO

②按位置传递参数

EXECUTE ssc_4 '00008'

③通过参数名传递参数

EXECUTE ssc_4

@cnumber='00008'

(3)使用默认参数值

①执行存储过程ssc_4时,如果没有给出参数,系统会报错。如果希望不给参数时,能查询所有课程的选修情况,则可以使用默认参数来实现

USE SM

GO

CREATE PROCEDURE ssc_5

@cnumber CHAR(5) =NULL

AS

IF  @cnumber IS NULL

BEGIN

SELECT Student.SNo,SName,Score

FROM Stuent JOIN SC ON Student.SNo=SC.SNo

END

ELSE

BEGIN

SELECT Student.SNo,SName,Score FROM Student JOIN SC ON Student.SNo=SC.SNo

WHERE SC.SNo=@cnumber

END

GO

②执行下面两条语句,比较执行结果。

EXECUTE ssc_5

EXECUTE ssc_5 '00005'

(4)使用输出参数

①创建一个存储过程ssc_6,获得选修某门课程的总人数

USE SM

GO

CREATE PROCEDURE ssc_6

@cnumber CHAR(5),@ccount INT OUTPUT

AS

SELECT @ccount=COUNT(*) FROM SC WHERE SC.CNo=@cnumber

GO

@执行存储过程ssc_6

DECLARE @ccount INT

EXECUTE ssc_6 '00008',@ccount OUTPUT

SELECT 'the result is',@ccount

(5)使用返回值

①创建一个返回执行状态码的存储过程ssc_7,它接受课程号为输入参数,如果执行成功,返回0;如果没有给出课程号,返回错误码1;如果给出的课程号不存在,返回错误码2;如果出现其他错误,返回错误码3.

USE SM

GO

CREATE PROCEDURE ssc_7

@cnumber CHAR(5) = NULL

AS

IF @cnumber IS NULL

BEGIN

PRINT 'error:you must specify a course number.'

RETURN(1)

END

ELSE

BEGIN

IF(SELECT COUNT(*) FROM SC WHERE CNo=@cumber)=0

BEGIN

PRINT 'error:you must specify a valid Course number'

RETURN(2)

END

END

SELECT @cnumber AS CNo FROM SC WHERE CNo=@cnumber

IF @@error<>0

BEGIN

RETURN(3)

END

ELSE

RETURN(0)

GO

执行存储过程ssc_7

DECLARE @result INT

EXEC @result ==ssc_7

SELECT 'the result is',@result

(6)修改存储过程(sqlserver 2008下)

在数据库根目录下,打开可编程选项下得存储过程选项,选择要修改的存储过程,右击鼠标,在弹出的对话框中选择修改即可

(7)查看存储过程。

执行以下语句,查看存储过程ssc_3 的信息。

EXEC sp_help ssc_3

(8)删除存储过程

执行以下语句,删除存储过程ssc_3

DROP PROCEDURE ssc_3

sqlserver存储过程学习笔记(一)基础知识篇(全)的更多相关文章

  1. MyBatis:学习笔记(1)——基础知识

    MyBatis:学习笔记(1)--基础知识 引入MyBatis JDBC编程的问题及解决设想 ☐ 数据库连接使用时创建,不使用时就释放,频繁开启和关闭,造成数据库资源浪费,影响数据库性能. ☐ 使用数 ...

  2. C#学习笔记(基础知识回顾)之值传递和引用传递

    一:要了解值传递和引用传递,先要知道这两种类型含义,可以参考上一篇 C#学习笔记(基础知识回顾)之值类型和引用类型 二:给方法传递参数分为值传递和引用传递. 2.1在变量通过引用传递给方法时,被调用的 ...

  3. C#学习笔记(基础知识回顾)之值类型和引用类型

    一:C#把数据类型分为值类型和引用类型 1.1:从概念上来看,其区别是值类型直接存储值,而引用类型存储对值的引用. 1.2:这两种类型在内存的不同地方,值类型存储在堆栈中,而引用类型存储在托管对上.存 ...

  4. C#学习笔记(基础知识回顾)之值类型与引用类型转换(装箱和拆箱)

    一:值类型和引用类型的含义参考前一篇文章 C#学习笔记(基础知识回顾)之值类型和引用类型 1.1,C#数据类型分为在栈上分配内存的值类型和在托管堆上分配内存的引用类型.如果int只不过是栈上的一个4字 ...

  5. Quartz学习笔记:基础知识

    Quartz学习笔记:基础知识 引入Quartz 关于任务调度 关于任务调度,Java.util.Timer是最简单的一种实现任务调度的方法,简单的使用如下: import java.util.Tim ...

  6. Docker的学习笔记(一)基础知识

    概述 本人最近在学习docker相关的知识,既是工作本身的需要也是自己对技术的追求的必要,以后我也会推出容器相关的随笔,既可以增长自己的知识,也可以和读者广泛交流,岂不乐乎?话不多说.第一篇先介绍do ...

  7. .net学习笔记---xml基础知识

    一.XML简介 XML是一种标记语言,用于描述数据,它提供一种标准化的方式来来表示文本数据.XML文档以.xml为后缀.需要彻底注意的是XML是区分大小写的. 先从一个简单的XML例子来了解下xml基 ...

  8. SqlServer存储过程学习笔记(增删改查)

    * IDENT_CURRENT 返回为任何会话和任何作用域中的特定表最后生成的标识值. CREATE PROCEDURE [dbo].[PR_NewsAffiche_AddNewsEntity] ( ...

  9. Scala学习笔记--正则表达式基础知识、如何在scala内使用

    正则表达式语法:https://msdn.microsoft.com/zh-cn/library/ae5bf541(VS.80).aspx 基础知识:正则表达式30分钟入门教程 http://www. ...

  10. (C/C++学习笔记) 一. 基础知识

    一. 基础知识 ● 程序和C/C++ 程序: 根据Wirth (1976), Algorithms + Data Structures = Programs. Whence C: 1972, Denn ...

随机推荐

  1. C#路径,文件,目录,I/O常见操作

         C#路径,文件,目录,I/O常见操作 文件操作是程序中非常基础和重要的内容,而路径.文件.目录以及I/O都是在进行文件操作时的常见主题,这里想把这些常见的问题作个总结,对于每个问题,尽量提供 ...

  2. win7 ShuipFCMS 配置 及问题

    随风下载地址:http://www.shuipfcms.com/download.shtml 碰到问题: 一.mb_strlen 函数不支持   到php.ini  开启 ;extension=php ...

  3. ZOJ 2853 Evolution 【简单矩阵快速幂】

    这道题目第二次看的时候才彻底理解了是什么意思 把题目转化为数学模型分析后就是 有一个初始序列, 有一个进化率矩阵 求的是初始序列 与进化率矩阵进行 m 次运算后, 初始序列最后一位的答案 那么显然,可 ...

  4. (Problem 15)Lattice paths

    Starting in the top left corner of a 22 grid, and only being able to move to the right and down, the ...

  5. IEEE浮点数float、double的存储结构

    众所周知,C的float.VB的Single都是32位浮点数变量类型(也叫单精度浮点数),C的double和VB的Double则都是64位的浮点数变量类型(也叫双精度浮点数).有些编译器还支持更屌的l ...

  6. WPF:DataTemplateSelector设置控件不同的样式

    原文 WPF:DataTemplateSelector设置控件不同的样式 最近想实现这么个东西,一个ListBox, 里面的ListBoxItem可能是文本框.下拉框.日期选择控件等等. 很自然的想到 ...

  7. (十六)JQuery Ready和angularJS controller的运行顺序问题

    项目中使用了JQuery和AngularJS框架,近期定位一个问题,原因就是JQuery Ready写在了angularJS controller之前,导致JQuery选择器无法选中须要的元素(由于a ...

  8. 一天一个类--ArrayList之二

    继续我的小激动--- 1.看看构造一个ArrayList 有两种方式 一个指定大小,一个不指定.我们知道他其实使用数组来实现了,数组肯定要有大小,那么他没指定大小,默认的是多少呢???追踪源码---开 ...

  9. Android FindMyPhone功能模块的实现

    类似iPhone手机上面“查找我的iPhone” 1. 手机定位 需要考虑到国内和国外,国内使用百度地图,国外使用google地图,两种地图,属于不同的坐标系. 手机这边为了避免不同坐标系的问题,直接 ...

  10. Android常用秘籍总结

    一.无法向模拟器push文件,显示read-only file system $adb shell mount -o remount rw/ 确保模拟器有sd卡 二.Android模拟按键 #adb ...