sqlserver存储过程学习笔记(一)基础知识篇(全)
说出来有点丢人,做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存储过程学习笔记(一)基础知识篇(全)的更多相关文章
- MyBatis:学习笔记(1)——基础知识
MyBatis:学习笔记(1)--基础知识 引入MyBatis JDBC编程的问题及解决设想 ☐ 数据库连接使用时创建,不使用时就释放,频繁开启和关闭,造成数据库资源浪费,影响数据库性能. ☐ 使用数 ...
- C#学习笔记(基础知识回顾)之值传递和引用传递
一:要了解值传递和引用传递,先要知道这两种类型含义,可以参考上一篇 C#学习笔记(基础知识回顾)之值类型和引用类型 二:给方法传递参数分为值传递和引用传递. 2.1在变量通过引用传递给方法时,被调用的 ...
- C#学习笔记(基础知识回顾)之值类型和引用类型
一:C#把数据类型分为值类型和引用类型 1.1:从概念上来看,其区别是值类型直接存储值,而引用类型存储对值的引用. 1.2:这两种类型在内存的不同地方,值类型存储在堆栈中,而引用类型存储在托管对上.存 ...
- C#学习笔记(基础知识回顾)之值类型与引用类型转换(装箱和拆箱)
一:值类型和引用类型的含义参考前一篇文章 C#学习笔记(基础知识回顾)之值类型和引用类型 1.1,C#数据类型分为在栈上分配内存的值类型和在托管堆上分配内存的引用类型.如果int只不过是栈上的一个4字 ...
- Quartz学习笔记:基础知识
Quartz学习笔记:基础知识 引入Quartz 关于任务调度 关于任务调度,Java.util.Timer是最简单的一种实现任务调度的方法,简单的使用如下: import java.util.Tim ...
- Docker的学习笔记(一)基础知识
概述 本人最近在学习docker相关的知识,既是工作本身的需要也是自己对技术的追求的必要,以后我也会推出容器相关的随笔,既可以增长自己的知识,也可以和读者广泛交流,岂不乐乎?话不多说.第一篇先介绍do ...
- .net学习笔记---xml基础知识
一.XML简介 XML是一种标记语言,用于描述数据,它提供一种标准化的方式来来表示文本数据.XML文档以.xml为后缀.需要彻底注意的是XML是区分大小写的. 先从一个简单的XML例子来了解下xml基 ...
- SqlServer存储过程学习笔记(增删改查)
* IDENT_CURRENT 返回为任何会话和任何作用域中的特定表最后生成的标识值. CREATE PROCEDURE [dbo].[PR_NewsAffiche_AddNewsEntity] ( ...
- Scala学习笔记--正则表达式基础知识、如何在scala内使用
正则表达式语法:https://msdn.microsoft.com/zh-cn/library/ae5bf541(VS.80).aspx 基础知识:正则表达式30分钟入门教程 http://www. ...
- (C/C++学习笔记) 一. 基础知识
一. 基础知识 ● 程序和C/C++ 程序: 根据Wirth (1976), Algorithms + Data Structures = Programs. Whence C: 1972, Denn ...
随机推荐
- ThinkPHP文件上传类
TP框架自带文件上传类使用: 类文件在ThinkPHP/Library/Think/默认在目录下 public function upload(){ $upload = new \Think\Uplo ...
- Mojo 返回一维和二维数组
这种情况不断的网数组@arr2里放入数据,返回的内容为: 这种情况是一维数组: while( $selStmt->fetch() ){ print "\$a1 is $a1\n&quo ...
- 基于visual Studio2013解决C语言竞赛题之0419误差控制
题目 解决代码及点评 /************************************************************************/ /* 19 ...
- Cannot drop the database ‘XXX’ because it is being used for replication.
删除订阅数据库的时候出现下面的错误: Cannot drop the database ‘XXX’ because it is being used for replication. 数据库的状态为 ...
- TCP三次握手和四次挥手具体解释
三次握手:建立TCP须要三次握手才干建立, 先Client端发送连接请求报文,Server段接受连接后回复ACK报文,并为这次连接分配资源.Client端接收到ACK报文后也向Server段发生ACK ...
- VirtualBox开发环境的搭建详解
有关VirtualBox的介绍请参考:VirtualBox_百度百科 由于VirtualBox官网提供的搭建方法不够详细,而且本人在它指导下,从下载所需的开发包,到最后生成二进制文件,中间遇到了许多的 ...
- Python多线程下的_strptime问题
Python多线程下的_strptime问题 由于Python的datetime和time中的_strptime方法不支持多线程,运行时会报错: import datetimeimport threa ...
- Windows Azure 网站的 IP 和域限制
编辑人员注释:本文章由 Windows Azure 网站团队的首席项目经理 Stefan Schackow 撰写. 配置 Azure 网站 (WAWS) 的 IP 和域限制一直是用户最迫切希望我们提供 ...
- stringstream clear()的疑问 - yuanshuilee的日志 - 网易博客
stringstream clear()的疑问 - yuanshuilee的日志 - 网易博客 stringstream clear()的疑问 2013-09-05 08:43:13| 分类: ...
- Savitzky-Golay滤波器(2)
前几天写过一篇介绍 Savitzky-Golay滤波器的文章, 没想到最近做项目还真的用上了. 因此就顺便写了个 C 语言的自动计算生成 SG 滤波器系数的程序.利用这里的代码可以生成任意阶数的 SG ...