存储过程的概念

存储过程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之存储过程的更多相关文章

  1. 在sql server中建存储过程,如果需要参数是一个可变集合怎么处理?

    在sql server中建存储过程,如果需要参数是一个可变集合的处理 原存储过程,@objectIds 为可变参数,比如 110,98,99 ALTER PROC [dbo].[Proc_totalS ...

  2. 在易语言中调用MS SQL SERVER数据库存储过程方法总结

    Microsoft SQL SERVER 数据库存储过程,根据其输入输出数据,笼统的可以分为以下几种情况或其组合:无输入,有一个或多个输入参数,无输出,直接返回(return)一个值,通过output ...

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

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

  4. SQL Server中存储过程 比 直接运行SQL语句慢的原因

    问题是存储过程的Parameter sniffing     在很多的资料中都描述说SQLSERVER的存储过程较普通的SQL语句有以下优点: 1. 存储过程只在创造时进行编译即可,以后每次执行存储过 ...

  5. ADO.NET访问SQL Server调用存储过程带回参

    1,ADO.NET访问SQL Server调用存储过程带回参 2,DatabaseDesign  use northwind go --存储过程1 --插入一条商品 productname=芹菜 un ...

  6. SQL Server 优化存储过程的七种方法

    原文:SQL Server 优化存储过程的七种方法 优化存储过程有很多种方法,下面介绍最常用的7种. 1.使用SET NOCOUNT ON选项 我们使用SELECT语句时,除了返回对应的结果集外,还会 ...

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

    原文:SQL Server中的CLR编程--用.NET为SQL Server编写存储过程和函数 很早就知道可以用.NET为SQL Server2005及以上版本编写存储过程.触发器和存储过程的,不过之 ...

  8. SQL Server中存储过程比直接运行SQL语句慢的原因

    原文:SQL Server中存储过程比直接运行SQL语句慢的原因 在很多的资料中都描述说SQLSERVER的存储过程较普通的SQL语句有以下优点: 1.       存储过程只在创造时进行编译即可,以 ...

  9. 查看SQL SERVER 加密存储过程,函数,触发器,视图

    原文:查看SQL SERVER 加密存储过程,函数,触发器,视图 create  PROCEDURE sp_decrypt(@objectname varchar(50))ASbeginset noc ...

  10. sql server系统存储过程大全

    关键词:sql server系统存储过程,mssql系统存储过程 xp_cmdshell --*执行DOS各种命令,结果以文本行返回. xp_fixeddrives --*查询各磁盘/分区可用空间 x ...

随机推荐

  1. python第十二周:MySql

    MySql数据库 MySQL 是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于 Oracle 公司.MySQL 是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不 ...

  2. python--(十步代码学会线程)

    python--(十步代码学会线程) 一.线程的创建 Thread实例对象的方法 # isAlive(): 返回线程是否活动的. # getname(): 返回线程名. # setName(): 设置 ...

  3. 【codeforces 757D】Felicity's Big Secret Revealed

    [题目链接]:http://codeforces.com/problemset/problem/757/D [题意] 给你一个01串; 让你分割这个01串; 要求2切..n+1切; 对于每一种切法 所 ...

  4. 【[Offer收割]编程练习赛13 C】 一人麻将

    [题目链接]:http://hihocoder.com/problemset/problem/1503 [题意] [题解] 一直在纠结如果没胡的话要扔掉哪一个麻将; 但其实可不用扔的,全部存起来就好了 ...

  5. Maven学习总结(5)——聚合与继承

    Maven学习总结(五)--聚合与继承 一.聚合 如果我们想一次构建多个项目模块,那我们就需要对多个项目模块进行聚合 1.1.聚合配置代码 <modules> <module> ...

  6. prime算法邻接表写法

    #include <iostream> #include <queue> using namespace std; typedef struct { long v; long ...

  7. kendo grid结合ajax功能

    我感觉使用ajax结合表格绑定效率更好一些,可以灵活的控制点击前后的事件,现在grid前后的事件我不能控制

  8. 络谷 P1363 幻想迷宫

    P1363 幻想迷宫 题目描述 背景 Background (喵星人LHX和WD同心协力击退了汪星人的入侵,不幸的是,汪星人撤退之前给它们制造了一片幻象迷宫.) WD:呜呜,肿么办啊…… LHX:mo ...

  9. [转]十五天精通WCF——第五天 你需要了解的三个小技巧

    一: 服务是端点的集合 当你在开发wcf的时候,你或许已经注意到了一个service可以公布多个endpoint,确实是这样,在wcf中有一句很经典的话,叫做“服务是端点的集合",就 比如说 ...

  10. Java Json格式的字符串转变对象

    Java Json格式的字符串转变对象: 方法还是比较多的: 学习:https://my.oschina.net/heweipo/blog/386808 其中的jsonlib说明:http://www ...