您的位置:首页 > 数据库

Day 9:(13) 存储过程实训_参考答案

2015-11-23 00:03 423 查看
-- 存储过程实训_参考答案:

-- 1. 创建存储过程pro_exam,显示exam表中的所有记录

create procedure pro_exam as select * from exam

-- 2. 执行存储过程pro_exam

pro_exam

-- 或

execute pro_exam

-- 3. 查栏存储过程pro_exam的定义文本

sp_helptext pro_exam

-- 4. 修改存储过程pro_exam,加密定义文本,并验证

alter  procedure pro_exam  with encryption as select * from exam

sp_helptext pro_exam

-- 5. 查看存储过程pro_exam的相关性信息

sp_depends pro_exam

-- 6. 查看存储过程pro_exam的目录信息

sp_stored_procedures pro_exam 

-- 7. 重命名存储过程pro_exam 为 pro_exam1,并查看

sp_rename pro_exam,pro_exam1

sp_help pro_exam1

-- 8. 删除存储过程pro_exam1

drop procedure pro_exam1

-- 9. 创建一个带有参数的存储过程pro_exam2,该存储过程根据传入的学生编号、课程号显示该学生的考试成绩

create procedure pro_exam2 @tnum char(8),@cnum char(6) as select * from exam where t_number=@tnum and c_number=@cnum

-- 10. 执行存储过程pro_exam2,查看学号为'20040301'课程号为'100101'的成绩

pro_exam2 '20040301','100101'

--或

exec pro_exam2 '20040301','100101'

--或

exec pro_exam2 @tnum='20040301',@cnum='100101'

-- 11. 使用pubs 数据库authors表,创建一个带有参数的存储过程pro_au,该存储过程传入作者所在的州,显示所有这个州的所有作者信息

create procedure pro_au @state char(2) as select * from authors where state=@state 

-- 12. 执行存储过程pro_au,查看所有state 为 'CA'州的所有作者信息

pro_au 'CA'

--或

execute pro_au 'CA'

--或

execute pro_au @tnum='CA'

--准备工作:

create table student(

SID  int, --学号

SName varchar(20), --姓名

enterDate datetime, --入学日期

job varchar(10), --职位

high numeric(8,2), --身高

teacherID int, --班主任代号

classID int) --班级编号

-- 13. 创建存储过程add_student1 向已经存在的student表,

  -- 插入数据学号、姓名、入学日期、职位、身高、班主任代号、班级编号

CREATE PROCEDURE add_student1 

@SID  int,@SName varchar(20),@enterDate datetime,@job varchar(10),@high numeric(8,2),@teacherID int,@classID int

AS

INSERT INTO student VALUES(@SID,@SName,@enterDate,@job,@high,@teacherID,@classID)

-- 14. 执行存储过程add_student1插入数据 1,'zhangsan','20100901','monitor',180,101,1001

add_student1 1,'zhangsan','20100901','monitor',180,101,1001

select * from student

-- 15. 创建存储过程add_student2 向已经存在的student表,

  -- 插入数据学号、姓名、入学日期、职位、身高、班级编号

CREATE PROCEDURE add_student2 

@SID  int,@SName varchar(20),@enterDate datetime,@job varchar(10),@high numeric(8,2),@classID int

AS

INSERT INTO student(SID,SName,enterDate,job,high,classID) VALUES(@SID,@SName,@enterDate,@job,@high,@classID)

-OR

CREATE PROCEDURE add_student3 

@SID  int,@SName varchar(20),@enterDate datetime,@job varchar(10),@high numeric(8,2),@classID int

AS

INSERT INTO student VALUES(@SID,@SName,@enterDate,@job,@high,null,@classID)

-- 16. 执行存储过程add_student2插入数据 2,'lisi','20100901','member',165,1001

add_student2 2,'lisi','20100901','member',165,1001

--OR

add_student2 3,'wangwu','20100901','member',170,1001

select * from student

-- 使用存储过程自动生成数据练习:

-- 创建表t_card

create table t_card

(

card_id bigint not null,--卡号 起始值223310001001 卡号连续

card_password int, --卡密码 随机六位数字

card_status char(1), --卡状态 0 为未使用

expire_date datetime, --截止日期 建卡3年后

batchid int --批号 起始值 1001

)

-- 利用存储过程自动生成数据
-- 一次生成一个批次的多个卡号

create procedure P_generatecard

as

begin
declare @bid int,@cid bigint,@j int
select @bid = isnull(max(batchid),1000),@cid = isnull(max(card_id),223310001000) from dbo.t_card
set @j = 1
while @j<=50
begin
insert into dbo.t_card values(@cid+@j,convert(int,rand()*899999)+100000,'0',dateadd(yy,3,getdate()),@bid+1)
set @j = @j + 1
end

end

P_generatecard

select * from dbo.t_card

-- 一次批量生成多个批次

create 

alter procedure P_generatecard1

as

begin
declare @bid int,@cid bigint,@i int,@j int
select @bid = isnull(max(batchid),1000) from dbo.t_card
set @i = 1
while @i <= 5
begin
select @cid = isnull(max(card_id),223310001000) from dbo.t_card

set @j = 1
while @j <= 50
begin
insert into dbo.t_card values(@cid+@j,convert(int,rand()*899999)+100000,'0',dateadd(yy,3,getdate()),@bid+@i)
set @j = @j + 1
end

set @i = @i + 1

end

end

P_generatecard1

select *  from dbo.t_card

-- 批量生成指定批次、卡数量/批次

create 

--alter 

procedure P_generatecard2 @dnum int,@cnum int

as

begin
declare @bid int,@cid bigint,@i int,@j int
select @bid = isnull(max(batchid),1000) from dbo.t_card
set @i = 1
while @i <= @dnum
begin 
select @cid = isnull(max(card_id),223310001000) from dbo.t_card
set @j = 1
while @j <= @cnum
begin
insert into dbo.t_card values(@cid+@j,convert(int,rand()*899999)+100000,'0',dateadd(yy,3,getdate()),@bid+@i)
set @j = @j + 1
end

set @i = @i + 1

end

end

P_generatecard2 5,500

select * from dbo.t_card

/* 以下不做

-- 17. 使用northwind 数据库order details表,创建一个带参数的存储过程pro_sale

    -- 该存储过程根据传入的订单号、产品号,计算销售额(=unitprice*quantity*(1-discount))

    -- 根据程序执行结果返回不同的值,程序成功返回0,程序失败返回错误号

select * from [order details]

CREATE

alter PROCEDURE pro_sale @oid int,@pid int ,@sale decimal(10,2)output

 AS 

declare @errorvalue int

set @errorvalue=0

select @sale=unitprice*quantity*(1-discount) from [order details] where @oid=orderid and @pid=productid 

if (@@ERROR<>0)

  set @errorvalue=@@ERROR

return @errorvalue

--  18. 执行存储过程pro_sale,计算订单号为10248产品号为11的销售额

declare @returnvalue int,@oid int,@pid int,@sale decimal(10,2)

select @oid=10248,@pid=11

execute @returnvalue=pro_sale @oid,@pid,@sale output

select @returnvalue as '返回是否出错'

select @sale as '销售额'

*/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  sql server 数据库