sql 存储过程的简单实现

--存储过程
/*
   1:什么是存储过程
类比c中的函数
     处理管理业务和业务规则 (t-sql 程序块)
                 (ddl  变量 逻辑控制 )
是否有返回参数
*/

--建立存储过程 -相当于c中的定义函数
--create view 名称 as  T-sql
--查处乐乐的个人信息(简单的实例)

use stu
go
create procedure pro_stuInfo
as
select * from stuInfo where stuName='乐乐'

--执行存储过程    --c中调用函数
exec pro_stuInfo


--自定义
--系统存储过程
exec sp_databases  --得到所有数据库的信息
exec sp_helpdb 'stu'  --指定数据库的信息
exec sp_renamedb 'bank','yinh'  --修改数据库的名称
exec sp_columns 'stuInfo'
exec sp_password '新密码','旧密码','用户名'
exec sp_helptext  '存储过程的名称'
--扩展的存储过程
--xp_cmdshell 默认是关闭
/*
  1:视图
  2: t-sql语句
*/
exec sp_configure  'show advanced options',1
go
reconfigure
go 
exec sp_configure 'xp_cmdshell',1
go
reconfigure

exec xp_cmdshell 'ipconfig'
--使用xp_cmdshell
use master
go
exec xp_cmdshell 'mkdir E:\banks',no_output
drop database shuju
create database shuju
create table bankyh
(
  id int
)

exec xp_cmdshell 'dir E:\banks'

--存储过程
--请创建存储过程,查看本次考试平均分以及未通过考试的学员名单
if exists(select * from sysObjects where name='pro_stuInfo' )
drop proc  pro_stuInfo
go  --必须是查询批次中的第一个语句
create  proc pro_stuInfo
as
select avg(writtenExam) from score
select stuName,stuInfo.stuNo,writtenExam,labExam from stuInfo
    inner join score on stuInfo.stuNo=score.stuNo where writtenExam<60 or labExam<60

--执行
exec pro_stuInfo

--带参数的存储过程
   --输入参数
   --输出参数

--每次笔试和机试的及格线可能随时变化(不再是分),
--这导致考试的评判结果也相应变化。
if exists(select * from sysObjects where name='pro_stuInfo_score' )
drop proc  pro_stuInfo_score
go 
create  proc pro_stuInfo_score
@writtenpass int,
@labpass int
as
select stuName,stuInfo.stuNo,writtenExam,labExam from stuInfo
    inner join score on stuInfo.stuNo=score.stuNo where writtenExam <@writtenpass or labExam<@labpass


--执行
exec pro_stuInfo_score 60,60  --带输入参数
--带默认值参数
if exists(select * from sysObjects where name='pro_stuInfo_score' )
drop proc  pro_stuInfo_score
go 
create  proc pro_stuInfo_score
@writtenpass  int=60,
@labpass  int=60
as
select stuName,stuInfo.stuNo,writtenExam,labExam from stuInfo
    inner join score on stuInfo.stuNo=score.stuNo where writtenExam <@writtenpass or labExam<@labpass
--执行
exec  pro_stuInfo_score
exec  pro_stuInfo_score @labpass=50   --对机试指定
exec  pro_stuInfo_score 90  --对笔试成绩
exec  pro_stuInfo_score @writtenpass=90 ,@labpass=50

--带输出参数

--笔试和机试的及格线,统计出不及格人数
if exists(select * from sysObjects where name='pro_stuInfo_score' )
drop proc  pro_stuInfo_score
go 
create  proc pro_stuInfo_score
@ispass int output,   --输出参数
@writtenpass  int=60,   --输入
@labpass  int=60
as
select @ispass =count(*) from score where writtenExam <@writtenpass or labExam<@labpass
select  *  from score where writtenExam <90 or labExam<90
--执行
declare @sum int
exec pro_stuInfo_score @sum output,90,90

print @sum

--(学习时候的总结)

你可能感兴趣的:(sql,C++,c,XP,Go)