资源描述:
《实验3 t-sql流程控制和函数》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、一.实验目的1.熟练掌握变量的定义、赋值与使用。2.熟练掌握常用基本运算符。3.熟练掌握流程控制语句,尤其是条件语句和循环语句。4.熟悉并掌握常用的系统函数。5.理解什么是标量函数、内嵌表值函数及多语句表值函数。6.熟练掌握自定义函数的定义和调用方法。二.实验内容及要求对CPXS数据库,完成如下任务:1.创建一名为CustomerName的局部变量,并在SELECT语句中使用该变量查找“客户D”购买产品的情况(包括产品名称、单价)。2.用T-SQL语言编程输出3~300之间能被7整除的数。3.查询CP表中各种产品的产品编号、产品名称
2、和价格,对其价格按以下规则进行转换:若价格小于1000,替换为“廉价产品”;若价格在1000-2000之间,替换为“一般产品”;若价格大于2000小于5000,替换为“昂贵产品”;若价格大于5000,替换为“奢侈品”;列标题更改为“评价”。4.使用系统函数,计算今天距“2012-1-1”还剩多少天。5.根据产品编号,查询该产品的名称;(函数名为udf_GetCPName)6.根据客户编号,统计其在某个时期内所购买的商品名称、数量及金额(函数名为udf_GetCPListByCID);对函数udf_GetCPListByCID,查询“
3、客户A”在“2011-1-1”到“2011-9-30”期间交易的销售日期、产品名称、销售数量和销售金额,并按销售日期升序排序。三.实验过程及结果(说明:要写出相关SQL语句,实验结果可以是运行画面的抓屏,抓屏图片要尽可能的小。)1.DECLARE@CustomerNamechar(30)SELECT@CustomerName='客户D'SELECT客户.客户名称,产品.产品名称,产品.价格单价FROM销售,客户,产品WHERE销售.客户编号=客户.客户编号and客户.客户名称=@CustomerNameand产品.产品编号=销售.产
4、品编号实验结果:2.DECLARE@iintSET@i=3WHILE@i<=300BEGINIF@i%7=0PRINT@iSET@i=@i+1END实验结果:3.SELECT产品.产品编号,产品.产品名称,产品.价格,CASEWHEN价格>=5000then'奢侈产品'WHEN价格>=2000then'昂贵产品'WHEN价格>=1000then'一般产品'WHEN价格>=0then'廉价产品'ENDAS评价FROM产品实验结果:4.SELECTDATEDIFF(day,GETDATE(),'2012-1-1')5.CREATEFUN
5、CTIONudf_GetCPName(@numberchar(30))RETURNSchar(30)ASBEGINDECLARE@NUchar(30)SELECT@NU=(SELECT产品.产品名称FROM产品WHERE产品.产品编号='S00002')RETURN@NUENDGODECLARE@NBchar(30)SET@NB='S00002'SELECTdbo.udf_GetCPName(@NB)6.由于原数据中的日期是从2011-10-1到2011-10-7的,所以我改动了一个数据日期为2011-08-1,实验结果如下图所示C
6、REATEFUNCTIONGet(@CBchar(30),@TOchar(30),@TTchar(30))RETURNS@QKtable(销售日期char(30),产品编号char(30),数量int,销售额int)ASBEGININSERT@QKSELECT销售.销售日期,产品.产品名称,销售.数量,销售.销售额FROM产品,销售WHERE产品.产品编号=销售.产品编号AND销售.客户编号=@CBAND销售.销售日期BETWEEN@TOAND@TTRETURNENDGODECLARE@Customchar(30)DECLARE@t
7、1char(30)DECLARE@t2char(30)SET@Custom='C00001'SET@t1='2011-1-1'SET@t2='2011-9-30'SELECT*FROMGet(@Custom,@t1,@t2)一.实验中的问题及心得这次的实验前四题做得比较快,后两道题做的就比较纠结,由于对用户自定义函数不是很熟,在定义标量函数时,其中有一个返回值是returns,而我去想当然的写成return,以至于在调试时,一直出错,总也找不到错误的原因,甚至于和书上的语句一个个的对,但任然找不到错误错在,于是我就强迫自己冷静一点点
8、的去看,最终发现了错误。这次的教训会让我在以后的编程中一定要仔细,不要急躁,要静下心来,写程序时不要想当然,要把语法彻底吃透。在写程序中一定要仔细,细心!