实验四存储与触发器资料Word格式文档下载.docx

上传人:b****6 文档编号:20432045 上传时间:2023-01-22 格式:DOCX 页数:21 大小:808.89KB
下载 相关 举报
实验四存储与触发器资料Word格式文档下载.docx_第1页
第1页 / 共21页
实验四存储与触发器资料Word格式文档下载.docx_第2页
第2页 / 共21页
实验四存储与触发器资料Word格式文档下载.docx_第3页
第3页 / 共21页
实验四存储与触发器资料Word格式文档下载.docx_第4页
第4页 / 共21页
实验四存储与触发器资料Word格式文档下载.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

实验四存储与触发器资料Word格式文档下载.docx

《实验四存储与触发器资料Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《实验四存储与触发器资料Word格式文档下载.docx(21页珍藏版)》请在冰豆网上搜索。

实验四存储与触发器资料Word格式文档下载.docx

5、使用不同参数传递值方式执行存储过程。

6、创建一个存储过程,用于返回“教务管理系统”数据库上某个班级中的学生人数,默认班级编号为‘20031340000102’。

7、定义一个变量用来存储存储过程Proc_GetClassStudent3返回的值。

8、创建一个返回执行代码为100的存储过程。

9、执行存储过程Proc_GetClassStudent2和Proc_GetClassStudent4,并定义两个个变量存储执行返回代码。

10、在commoditysell中创建一个名为GetFactProd的存储过程,用于实现:

由执行该存储过程时提供的厂家的名称,查询其生产的产品信息,返回产品的ProdID、ProdName、UnitPrice和StockAmount。

(使用“四川绵阳”和“上海黄埔”两个厂家的名称执行存储过程)

11、在commoditysell中创建一个名为SellProdAmount的存储过程,用于实现:

由执行该存储过程时提供的商场的名称,查询其销售的产品数量,并用输出参数输出销量数。

(使用“双桥子商场”和“十陵商场”两个商场名称执行程存储过程)

12、设计一个简单的AFTERINSERT触发器,这个触发器的作用是:

在插入一条记录的时候,发出“又添加了一个学生的成绩”的友好提示。

13、在score表中创建触发器,在向score表中插入数据时,先检待插入的数据中的sno和cno是否存在于student表和sc表中,如果不存在则不允许插入。

14、创建一个触发器,当删除student表中的数据时,需要判断该数据对应的学生是否有选课,如果有,也需要将其选课信息全部删除。

15、在score表上创建一个insteadofinsert触发器,实现:

当向表score插入记录时检查分数的合理性,如果不合理就不进行插入操作,否则允许。

16、在score表上创建一个insteadofdelete触发器,实现:

当从表score删除记录时检查各课程的成绩是否为空,如果为空就不允许进行删除操作,否则允许。

17、在score表上创建一个insteadofupdate触发器,实现:

当从表score更新记录时检查当前用户是否是dbo,如果不是dbo就不允许进行更新操作,否则允许。

18、给sell表创建一个afterinsert触发器,实现:

当向sell插入一条记录时,修改stock表stock_amount(库存数量),值等于stock_amount-sell_amount,还有修改时间modified_date,并显示相应的提示信息:

“库存量还剩余stock_amount-sell_amount”,当(stock_amount-sell_amount)<

0时,不允许进行插入操作,即操作回滚,并显示相应的提示信息:

“库存量不足,只有stock_amount”。

四、实验步骤

createprocedureProcStudentInfo

as

select学号,姓名,性别,班级编号,年级,籍贯from学生信息

executeProc_StudentInfo

3、创建一个存储过程

,用于返回“教务管理系统”数据库上某个班级中所有学生的信息。

CREATEPROCEDUREProc_GetClassStudent1

@ClassIDvarchar(14)

AS

SELECT学号,姓名,性别,班级编号,年级,籍贯FROM学生信息

WHERE班级编号=@ClassID

REATEPROCEDUREProc_GetClassStudent2

@ClassIDvarchar(14)='

AS

SELECT学号,姓名,性别,班级编号,年级,籍贯FROM学生信息

WHERE班级编号=@ClassID

EXECProc_GetClassStudent2

EXECProc_GetClassStudent2'

20031340000101'

EXECProc_GetClassStudent2@ClassID='

20031340000104'

6、创建一个存储过程,用于返回“教务管理系统”数据库上某个班级中的学生人数,默认班级编号为‘20031340000102’

use教务管理系统

go

CREATEPROCEDUREProc_GetClassStudent3

@ClassIDvarchar(14)='

as

SELECTcount(学号)as学生人数FROM学生信息where班级编号

=@classid

EXECUTEProc_GetClassStudent3'

createprocedureProc_GetClassStudent3@banjichar(14),@outnumeric(3,0)output

select@out=人数from班级信息

where班级编号=@banjiand@banji='

declare@outnumeric(3,0)

executeProc_GetClassStudent3'

@outoutput

select@outas人数

USE教务管理系统

GO

CREATEPROCEDUREProc_GetClassStudent4@ClassIDvarchar(14)

ASBEGIN

SELECT学号,姓名,性别,班级编号,年级,籍贯FROM学生信息WHERE班级编号=@ClassIDRETURN100END

DECLARE@return1int,@return2int

EXEC@return1=Proc_GetClassStudent2'

EXEC@return2=Proc_GetClassStudent4'

SELECT@return1

SELECT@return2

usecommoditysell

createprocedureGetFactProd@厂名char(8)

selectProdID,ProdName,UnitPrice,StockAmountfromProductInfo

whereFactAddr=@厂名

executeGetFactProd'

四川绵阳'

上海黄埔'

createprocedureSellProdAmount@名称varchar(10),@数量varchar(10)output

select@数量=SellAmoutfromEmporiumSell

whereEmpID=(selectEmpIDfromEmporiumInfowhereEmpName=@名称)

双桥子商场'

十陵商场'

11、设计一个简单的AFTERINSERT触发器,这个触发器的作用是:

先建立三个表:

createtablescore

snochar(9),

cnoint,

gradeint

createtablestock(

prod_idchar(10),

prod_namevarchar(10),

unit_priceint,

stock_amountint,

modified_datedatetime

createtablesell(

order_idintidentity(1,1),

sell_amountint,

sell_datedatetime,

Salervarchar(10)

接着:

createtriggeradd_sconscore

afterinsert

begin

print'

又添加了一个学生的成绩'

end

insertintoscorevalues('

20110523'

23,50)

12、在score表中创建触发器,在向score表中插入数据时,先检待插入的数据中的sno和cno是否存在于student表和sc表中,如果不存在则不允许插入。

CREATEtriggeradd_sc2onscore

declare@snochar(9)

select@sno=sno

fromstudent

wheresno=(selectsnofrominserted)

if@snoisnull

begin

rollbacktransaction

print'

不存在这样的学生学号!

'

--raiserror('

16,20)

end

13,80)

USEcommoditysell

GO

INSERTINTOscore

values('

20110529'

13、创建一个触发器,当删除student表中的数据时,需要判断该数据对应的学生是否有选课,如果有,也需要将其选课信息全部删除。

CREATEtriggerdel_stuonstudent

afterdelete

fromscore

wheresno=(selectsnofromdeleted)

if@snoisnotnull

deletefromscorewheresno=@sno

该学生的选课记录也已经删除!

insertintostudentvalues('

20110526'

'

李明'

男'

19,'

计算机'

deletefromstudentwheresno='

select*fromscore

14、在score表上创建一个insteadofinsert触发器,实现:

CREATEtriggeradd_sc3onscore

insteadofinsert

declare@gradeint

select@grade=grade

frominserted

if@grade<

0or@grade>

100

该学生的成绩不合理!

20110525'

13,-80)

15、在score表上创建一个insteadofdelete触发器,实现:

CREATETRIGGERscore_insert_delete

onscore

insteadofdelete

begin

SETNOCOUNTON

declare@snochar(9),@cnoint,@gradeint

select@sno=sno,@cno=cno,@grade=gradefrom

deleted

if(@gradeisNULL)

成绩为空,不允许删除该记录!

else

deletefromscorewheresno=@snoandcno=@cno

16、在score表上创建一个insteadofupdate触发器,实现:

CREATEtriggerdelete_sconscore

declare@cjint

select@cj=grade

fromdeleted

if@cjisnull

有课程成绩为空,不允许删除!

17、给sell表创建一个afterinsert触发器,实现:

ALTERtriggerscore_update_instead

insteadofupdate

declare@sno1varchar(10),@sno2varchar(10),@current_uservarchar(10)

select@sno1=sno

frominserted

select@sno2=sno

fromdeleted

if(current_user!

='

dbo'

rollbacktransaction

不是dbo用户不能修改学生姓名信息'

else

updatescore

setsno=@sno1

wheresno=@sno2

end

五、实验总结

在本次实验中,要求了解存储过程的概念和作用,掌握创建存储过程的方法。

在写代码的过程中,虽然时常发现有困难,但是在同学和老师的共同帮助下,还是很认真的写出了结果,同时也加深了我们对数据库的了解。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科 > 军事政治

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1