存储过程

--创建不带参数的存储过程

--获取所有的学生成绩信息
if exists(select * from sysobjects where name='Proc_GetAllStuMark')
drop proc Proc_GetAllStuMark
go
create proc Proc_GetAllStuMark
as
    select a.StuName,b.Subject,b.Score 
    from StuInfo a,StuMarks b
    where a.StuID=b.StuID
go
exec Proc_GetAllStuMark
execute Proc_GetAllStuMark --使用execute 执行存储过程


--创建带有参数的存储过程

--根据学生姓名,获得学生成绩
if  exists(select * from sysobjects where name='Proc_GetStuMarkByStuName')
drop proc Proc_GetStuMarkByStuName
go
create proc Proc_GetStuMarkByStuName
@stuname varchar(20)
as
    select a.StuName,b.Subject,b.Score
    from StuInfo a,StuMarks b
    where a.StuID=b.StuID
    and a.StuName=@stuname
go
exec Proc_GetStuMarkByStuName '李四'

--创建参数有默认值的存储过程

--添加学生信息表的数据
if  exists(select * from sysobjects where name='Proc_InsertStuInfo')
drop proc Proc_InsertStuInfo
go
create proc Proc_InsertStuInfo
@stuname varchar(20),
@stusex char(2)='男',
@classid int = 2
as
    insert into StuInfo(StuName,StuSex,ClassID)
    values(@stuname,@stusex,@classid)
go
--调用参数有默认值的存储过程
exec Proc_InsertStuInfo '唐僧'
exec Proc_InsertStuInfo '猪八戒',@classid=1


-- 创建带输出参数的存储过程

--根据学生姓名查找学员java分数

if exists(select * from sysobjects where name='Proc_GetCMarkByStuName')
drop proc Proc_GetCMarkByStuName
go
create proc Proc_GetCMarkByStuName
@stuname varchar(20),
@cmark int output --output定义当前的参数为输出参数
as
    --打印初始值
    print '分数的初始值:'+convert(varchar,@cmark)

    select @cmark=b.Score from StuInfo a,StuMarks b
    where a.StuID=b.StuID
    and b.Subject='java' and a.StuName=@stuname
go

--调用该存储过程
declare @cmark int
set @cmark=100
exec Proc_GetCMarkByStuName '李四',@cmark output
print '李四的java分数为:'+convert(varchar,@cmark)

--列出服务器上的所有数据库
EXEC sp_databases
--更改数据库的名称
exec sp_renamedb 'lession05','lession5'
use Lession3
go
--返回当前环境下可查询的对象的列表
exec sp_tables
--返回某个表列的信息
exec sp_columns StuInfo
--查看某个表的所有信息
exec sp_help StuInfo
--查看某个表的约束
exec sp_helpconstraint StuInfo
--查看某个表的索引
exec sp_helpindex StuMarks
--显示视图实际文本
exec sp_helptext 'view_stuInfo_stuMarks'
--列出当前环境中的所有存储过程
exec sp_stored_procedures



--实现以零作除数错误

--自定义错误
--raiserror(错误消息,严重级别,状态)
if exists(select * from sysobjects where name='Proc_Devide')
drop proc Proc_Devide
go
create proc Proc_Devide
@a int,
@b int
as  
    declare @c int
    if(@b=0)
    begin
        raiserror('以零作除数错误',15,2)
        return
    end
    set @c=@a/@b
go
exec Proc_Devide 10,0
select @@error as 错误编号



--练习1
--使用xp_cmdshell创建Student数据库,StuInfo数据表
USE master
exec xp_cmdshell 'md d:\MyDB',no_output
go

create database Student
on(
    name='student',
    filename='d:\MyDB\student.mdf'
)
log on(
    name='student_log',
    filename='d:\MyDB\student_log.ldf'
)
go
use Student
create table StuInfo(
    sid int identity(1,1) primary key,
    sname varchar(10),
    sex varchar(2)

)
go

--练习2
--创建向表Stuinfo插入数据的存储过程
create proc InsertRecord
@sname varchar(10),
@sex char(2)
as
insert into StuInfo values(@sname,@sex)

go
--调用存储过程,插入数据

exec InsertRecord'张明仁','男'
go
exec InsertRecord'李朋鸣','男'
go
exec InsertRecord'罗瑞红','女'
go

--练习3

--创建表StuScore
use Student
create table StuScore(
    id int identity(1,1) primary key,
    sid int references StuInfo(sid) not null,
    exam int not null
)
go

--创建向表StuScore插入数据的存储过程
create proc InsertScore
@sid int,
@eaxm int
as
insert into StuScore values(@sid,@eaxm)
 
go
--插入数据
exec InsertScore 1,85
go
exec InsertScore 2,65
go


if exists (select * from sysobjects where name='proc_name')
drop proc proc_name
go
create proc proc_name
@sname varchar(10)='*',
@count int=0
as  
    if  @sname = '*'
        begin
        select sname,exam from StuInfo a,StuScore b where a.sid = b.sid
        end
    else
        begin
        select @count = count(*) from StuInfo a,StuScore b where a.sid = b.sid and sname=@sname
        if @count = 0
            begin 
                print convert(varchar(10),@sname)+'学生不存在'
            end
        else
            begin
            select sname,exam from StuInfo a,StuScore b where a.sid = b.sid and sname=@sname
            end
        
        end
go


exec proc_name'张仁'
go



exec proc_name






©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 221,820评论 6 515
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,648评论 3 399
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 168,324评论 0 360
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,714评论 1 297
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,724评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,328评论 1 310
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,897评论 3 421
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,804评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,345评论 1 318
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,431评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,561评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,238评论 5 350
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,928评论 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,417评论 0 24
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,528评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,983评论 3 376
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,573评论 2 359

推荐阅读更多精彩内容