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 ...
随机推荐
- 【Codeforces 1106E】Lunar New Year and Red Envelopes
[链接] 我是链接,点我呀:) [题意] 给你k个红包,每个红包可以在si..ti的时间范围内拿走. 抢完红包之后你得到wi元,然后你需要在di+1时刻才能继续抢红包 时间是线性的从1..n 然后某个 ...
- 【codeforces 508A】Pasha and Pixels
[题目链接]:http://codeforces.com/contest/508/problem/A [题意] 让你在一个n*m的方格上给方格染色; 顺序给出染色的k个格子 如果在某一时刻 有一个2* ...
- BUPT2017 springtraining(16) #4 ——基础数论
题目在这里 A.手动打表找规律得组合数 n -= 2, m -= 2, ans = C(n, m) #include <bits/stdc++.h> using namespace std ...
- MySql 格式化时间(包括正常时间格式与unix时间戳的互相转换)
函数:FROM_UNIXTIME 作用:将MYSQL中以INT(11)存储的时间以"YYYY-MM-DD"格式来显示.语法:FROM_UNIXTIME(unix_timestamp ...
- nyoj_366_D的小L_201403011600
D的小L 时间限制:4000 ms | 内存限制:65535 KB 难度:2 描述 一天TC的匡匡找ACM的小L玩三国杀,但是这会小L忙着哩,不想和匡匡玩但又怕匡匡生气,这时小L给 ...
- [bzoj3529][Sdoi2014]数表_树状数组_莫比乌斯反演
数表 bzoj-3529 Sdoi-2014 题目大意:n*m的数表,第i行第j列的数是同时整除i和j的所有自然数之和.给定a,求数表中所有不超过a的和. 注释:$1\le n,m \le 10^5$ ...
- ZooKeeper教程资源收集(简介/原理/示例/解决方案)
菩提树下的杨过: ZooKeeper 笔记(1) 安装部署及hello world ZooKeeper 笔记(2) 监听数据变化 ZooKeeper 笔记(3) 实战应用之[统一配置管理] ZooKe ...
- oracle加入联合主键
alter table tablename add constraint unionkeyname primary key (column1,column2); 上面语句中: tablename为要加 ...
- ios单元測试之GHUnit
1.相同创建一个測试的project, 2.通过cocoaPod来下载GHUnit框架,或者到github上下载.由于这个框架是开源的第三方框架. 同一时候加入QuartCore.framework( ...
- 冒泡排序Vs直接选择排序
什么是排序?为什么要使用排序?事实上我们生活中处处都用到了排序.拿字典来说,如今,我们要在字典中查找某个字(已经知道这个字的读音),首先.我们须要依据这个字的读音,找到它所所在文件夹中的位置,然后依据 ...