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 ...
随机推荐
- 配置yum仓库和rpm包
作业一: 1) 开启Linux系统前添加一块大小为15G的SCSI硬盘 2) 开启系统,右击桌面,打开终端 3) 为新加的硬盘分区,一个主分区大小为5G,剩余空间给扩展分区,在扩展分区上划分1个逻辑分 ...
- C# WPF 窗体传递消息
对于存在窗体的WPF程序(或者说,起码在任务栏上有个图标,即ShowInTaskbar = true),互相传递消息是很容易的. 步骤: 1,寻找窗体的句柄 2,运用windows API: Send ...
- HDOJ 4857 逃生
BestHack.....真乱..... 逃生 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/ ...
- [Python]通过websocket与jsclient通信
站点大多使用HTTP协议通信.而HTTP是无连接的协议.仅仅有client请求时,server端才干发出对应的应答.HTTP请求的包也比較大,假设仅仅是非常小的数据通信.开销过大.于是,我们能够使用w ...
- HashMap源代码剖析
大部分思路都是一样的 .仅仅是一些细节不一样.源代码中都标了出来.jdk容器源代码还是挺简单的. public class HashMap<K,V> extends AbstractMap ...
- Git 少用 Pull 多用 Fetch 和 Merge 【已翻译100%】【转】
本文转载自:https://www.oschina.net/translate/git-fetch-and-merge?lang=chs&page=1# 本文有点长而且有点乱,但就像Mark ...
- Framebuffer 机制【转】
本文转载自:http://blog.csdn.net/paul_liao/article/details/7706477 Framebuffer Framebuffer是Linux系统为显示设备提供的 ...
- log4net preserveLogFileNameExtension 和 watch
preserveLogFileNameExtension <log4net> <appender name="fileappender" type="l ...
- hdfs du命令是算的一份数据
As you can see, hadoop fsck and hadoop fs -dus report the effective HDFS storage space used, i.e. th ...
- CodeForces 754D Fedor and coupons&&CodeForces 822C Hacker, pack your bags!
D. Fedor and coupons time limit per test 4 seconds memory limit per test 256 megabytes input standar ...