SQL Server之存储过程
存储过程的概念
存储过程Procedure是一组为了完成特定功能的SQL语句集合,经编译后存储在数据库中,用户通过指定存储过程的名称并给出参数来执行。
存储过程中可以包含逻辑控制语句和数据操纵语句,它可以接受参数、输出参数、返回单个或多个结果集以及返回值。
由于存储过程在创建时即在数据库服务器上进行了编译并存储在数据库中,所以存储过程运行要比单个的SQL语句块要快。同时由于在调用时只需用提供存储过程名和必要的参数信息,所以在一定程度上也可以减少网络流量、简单网络负担。
--===========系统存储过程============== --显示系统数据库
exec sp_databases --显示数据库详细信息
exec sp_helpdb --给指定的数据库更换名称
exec sp_renamedb 'aa','bb' --查看指定表名的详细信息
exec sp_help student --查看指定索引、视图、存储过程等的创建文本信息
exec sp_helptext sp_help --调用存储过程必须在批处理文件第一位
if exists(select * from sysobjects where name = 'Table1')
drop table Table1
go
sp_help sp_help --==========系统扩展存储过程================
use master
go --创建文件夹bank
exec xp_cmdshell 'mkdir D:\bank',no_output
if exists(select * from sysdatabases where name = 'bankDB')
drop database bankDB
go create database bankDB
on primary
(
name = 'bankDB',
filename = 'D:\bank\bankDB.mdf',
size = 5MB,
maxsize = 10MB,
filegrowth = 15%
)log on(
name = 'bankDB_log',
filename = 'D:\bank\bankDB_log.ldf',
size = 5MB,
filegrowth = 15%
) --调用储存过程查看文件夹信息
exec xp_cmdshell 'dir D:\bank\' --========创建存储过程,查询Java Logic最近一次考试平均分以及未通过考试的学员名单=========
use MySchool
go if exists(select * from sysobjects where name = 'sp_getavgresult')
drop proc sp_getavgresult
go
--创建存储过程实现
create proc sp_getavgresult
@returnnum int output, --返回未及格的人数
@returnsum int output, --参加考试总人数
@subjectName varchar(30), --添加科目
@score int = 60 --添加输入参数(及格分数)
as
declare @subjectId int
declare @maxdate date
declare @avg int --查询java logic课程的编号
select @subjectId = SubjectId from Subject where SubjectName = @subjectName --查询java logic课程最近一次考试时间
select @maxdate = MAX(ExamDate) from Result where SubjectId = @subjectId --查询java logic课程最近一次考试的平均分
select @avg = AVG(StudentResult) from Result where
SubjectId = @subjectId and ExamDate = @maxdate
print '未通过考试的人员名单:======================='
--查询java logic课程最近一次考试未通过的学生名单
select studentName,studentResult from student s
inner join Result r on r.StudentNo = s.StudentNo
where SubjectId = @subjectId
and ExamDate = @maxdate
and StudentResult < @score --查询参加考试的总人数
select @returnsum = COUNT(*) from Result where ExamDate = @maxdate and SubjectId = @subjectId --查询未及格的人数
select @returnnum = COUNT(*) from Result where ExamDate = @maxdate and SubjectId = @subjectId
and StudentResult < @score if(@avg > 70)
begin
print '考试结果:优秀'
end
else
begin
print '考试结果:较差'
end go --=======调用储存过程实现业务逻辑===========---- declare @sum int --参加考试总人数
declare @num int --未及格人数
declare @percent float(2) --及格百分比 --调用存储过程
exec sp_getavgresult @num output,@sum output,@subjectName = 'java logic',@score = 60 print '========================================='
print '参加考试人数为:' + convert(varchar(30),@sum)
print '未及格人数为:' + convert(varchar(30),@num) --计算及格率
set @percent = convert(float(2),(@sum - @num))/@sum * 100
print '及格百分比:' + convert(varchar(30),@percent) +'%' --判断是否要调及格分数线
if(@percent > 50)
begin
print '不需要调分数线。。。'
end
else
begin
print '需要降低分数线。。。'
end
SQL Server之存储过程的更多相关文章
- 在sql server中建存储过程,如果需要参数是一个可变集合怎么处理?
在sql server中建存储过程,如果需要参数是一个可变集合的处理 原存储过程,@objectIds 为可变参数,比如 110,98,99 ALTER PROC [dbo].[Proc_totalS ...
- 在易语言中调用MS SQL SERVER数据库存储过程方法总结
Microsoft SQL SERVER 数据库存储过程,根据其输入输出数据,笼统的可以分为以下几种情况或其组合:无输入,有一个或多个输入参数,无输出,直接返回(return)一个值,通过output ...
- SQL Server 2008 存储过程,带事务的存储过程(创建存储过程,删除存储过程,修改存储过
SQL Server 2008 存储过程,带事务的存储过程(创建存储过程,删除存储过程,修改存储过 存储过程 创建存储过程 use pubs --pubs为数据库 go create proc ...
- SQL Server中存储过程 比 直接运行SQL语句慢的原因
问题是存储过程的Parameter sniffing 在很多的资料中都描述说SQLSERVER的存储过程较普通的SQL语句有以下优点: 1. 存储过程只在创造时进行编译即可,以后每次执行存储过 ...
- ADO.NET访问SQL Server调用存储过程带回参
1,ADO.NET访问SQL Server调用存储过程带回参 2,DatabaseDesign use northwind go --存储过程1 --插入一条商品 productname=芹菜 un ...
- SQL Server 优化存储过程的七种方法
原文:SQL Server 优化存储过程的七种方法 优化存储过程有很多种方法,下面介绍最常用的7种. 1.使用SET NOCOUNT ON选项 我们使用SELECT语句时,除了返回对应的结果集外,还会 ...
- SQL Server中的CLR编程——用.NET为SQL Server编写存储过程和函数
原文:SQL Server中的CLR编程--用.NET为SQL Server编写存储过程和函数 很早就知道可以用.NET为SQL Server2005及以上版本编写存储过程.触发器和存储过程的,不过之 ...
- SQL Server中存储过程比直接运行SQL语句慢的原因
原文:SQL Server中存储过程比直接运行SQL语句慢的原因 在很多的资料中都描述说SQLSERVER的存储过程较普通的SQL语句有以下优点: 1. 存储过程只在创造时进行编译即可,以 ...
- 查看SQL SERVER 加密存储过程,函数,触发器,视图
原文:查看SQL SERVER 加密存储过程,函数,触发器,视图 create PROCEDURE sp_decrypt(@objectname varchar(50))ASbeginset noc ...
- sql server系统存储过程大全
关键词:sql server系统存储过程,mssql系统存储过程 xp_cmdshell --*执行DOS各种命令,结果以文本行返回. xp_fixeddrives --*查询各磁盘/分区可用空间 x ...
随机推荐
- 暑假集训D21总结
考试 今天考了一大圈 不可做 题 本来是爆零的,后来把数据改了一下,成功暴力骗了5分= = 刷题 无限水题$ing$,然后就$GG$了 生活 不开心$ing$,没有啥好写的 今天就是莫名的不开心 歌 ...
- 【Developer Log】ProGuard扰码可执行JAR包
在项目上线之前需要通过ProGuard来对java的class进行混淆,以避免反编译方式,来保护自己的代码.ProGuard网上有很多资料,可以参考:http://blog.csdn.net/zhan ...
- Linux进程线程学习笔记:运行新程序
Linux进程线程学习笔记:运行新程序 周银辉 在上一篇中我们说到,当启动一个新进程以后,新进程会复制父进程的大部份上下 ...
- [转]十五天精通WCF——第一天 三种Binding让你KO80%的业务
转眼wcf技术已经出现很多年了,也在.net界混的风生水起,同时.net也是一个高度封装的框架,作为在wcf食物链最顶端的我们所能做的任务已经简单的不能再简单了, 再简单的话马路上的大妈也能写wcf了 ...
- not in 和 <> 不走索引
首先我们要知道的一点就是CBO的代码oracle是不会对我们公开的,起码现在是.所以本文中的结论不一定适用所有的版本.在应用本文的结论之前最好先试一下. ok 下面就是本文的结论,当你在where语句 ...
- CF #329 C
C题我还以为是拉格朗日插值... 其实可以想象到,必须有这样一个函数,经过某一点时,其它圆相关的函数要为0. 于是,可以构造这样的一个函数,对于x有 (x/2)*(1-abs(t-i)+abs(1-a ...
- 我要抓狂了。。又回到了几天不能A一道题的时候
poj1556我不做了.你做做把...我已经要game over了
- CSUOJ 1329 一行盒子(数组模拟链表)
题目:id=1329">http://acm.csu.edu.cn/OnlineJudge/problem.php? id=1329 题意: watermark/2/text/aHR0 ...
- [React] Refactor a connected Redux component to use Unstated
In this lesson, I refactor a simple Counter component connected to Redux to use Unstated instead. I ...
- json、js数组真心不是想得那么简单
之前因为做前台的东西比較少,对于json和js数组的认识仅局限于一种固定格式.这样的固定的思维在开发前台时,特别是近期使用highcharts插件时.让我感到特别不明确.通过查询最终心头的疙瘩解开了. ...