SQL编程及存储过程实验

  • 格式:doc
  • 大小:270.00 KB
  • 文档页数:11

集美大学计算机工程学院实验报告一、实验目的1.了解T-SQL的基本数据类型、函数;2.掌握局部变量的定义和赋值;3.掌握存储过程的定义及调用二、实验内容与设计思想●主要内容:1.基本结构编程;2.存储过程的建立;3.存储过程的调用。

●知识准备:1.SQL中的基本数据类型:VARCHAR:字符数据。

DATETIME:(常量使用特定格式的字符日期值来表示,并使用单引号括起来。

例如:'1976-05-28','MAY 28, 1976','28 MAY, 1976','760528','05/28/76'。

INTEGER:用一串数字来表示,不含小数点,不使用引号。

例如,123,1896。

DECIMAL:用一串数字来表示,可以包含小数点,不使用引号。

例如,1893.1209,2.0。

FLOAT和REAL:使用科学记数法表示。

例如,101.5E5,0.5E-2。

MONEY:用一串数字,可以包含或不包含小数点,以一个货币符号($)作为前缀,不使用等等2.SQL中的变量:SQL中变量用来存放临时数据,变量使用前一定要先进行定义,变量名必须以@开头。

另外,SQL SERVER中还提供一些系统变量,系统变量是以@@开头的。

变量的定义:DECLARE 变量名数据类型如GODECLARE @NAME VARCHAR(20)SET @NAME='王雨'PRINT @NAMEGO3.SQL中的基本函数(1) 字符串函数:LEN()、UPPER()、LOWER()、RIGHT()、LEFT()、SUBSTRING()、CHARINDEX()、STR()、REPLACE()等(2) 数学函数:常用的数学函数通常对作为参数提供的输入值执行计算,并返回一个数字值。

如ABS()、POWER()、SQUARE()、SQRT()、ROUND()、RAND()等。

(3)日期和时间函数:日期和时间函数对日期和时间输入值执行操作,并返回一个字符串、数字值或日期和时间值。

GETDATE()、DATEADD()、DATEIFF()、DATEPART()、ISDATE()、DAY()、MONTH()、YEAR()等(4)数据类型转换函数CAST函数CAST( EXPRESSION AS DATA_TYPE )CONVERT函数CONVERT( DATA_TYPE[ ( LENGTH ) ], EXPRESSION [ , STYLE ] )4.存储过程的创建及调用CREATE PROC 过程名[{@变两名数据类型}][, …N]ASSQL语句调用:EXEC过程名参数列表DECLARE @变量名数据类型注意:SAL中的局部变量名必须以@开头。

三、实验使用环境硬件环境要求:PC机(单机)使用的软件名称、版本号以及模块:WINDOWS XP下的SQL SERVER 2005四、实验步骤和调试过程各表格数值:C02:S02:SC02:●验证性试验:1.编程实现查询与‘李勇’同系的学生学号USE STUDENTGODECLARE @DEPA VARCHAR(20)SELECT @DEPA=DEPA FROM S WHERE SNAME=’ 李勇’SELECT SNO FROM SWHERE DEPA=@DEPA2.运行下面的程序,观察运行结果DECLARE @X INT, @Y INTSET @X=0SELECT @Y=1WHILE @Y<20BEGINSET @X=@X+@YSELECT @Y=@Y+2PRINT STR(@Y)+’IN THE LOOP’IF @Y>14BREAKENDPRINT ‘OUT OF THE LOOP’3. CASE函数的使用(1)CASE后带表达式SELECT 性别=CASE SEXWHEN ‘男’ THEN ‘M’WHEN ‘女’ THEN ‘F’ELSE ‘输入出错’ENDFROM S02(2) CASE后不带参数SELECT 性别=CASEWHEN SEX= ‘男’ THEN ‘M’WHEN SEX=‘女’ THEN ‘F’ELSE ‘ERROR’ENDFROM S02(3) 用CASE 语句进行多条件修改UPDATE S02 SET DEPA=CASE DEPAWHEN 'CS ' THEN '计算机系'WHEN '信息系' THEN 'IS'WHEN '数学系' THEN 'MA'WHEN '物理系' THEN 'PH'END4.存储过程(1)不带参数的存储过程CREATE PROC SCLISTASSELECT SNO,CNO, GRADE FROM SC02 WHERE SNO IN (SELECT SNO FROM S02 WHERE DEPA=’计算机系’)执行存储过程:EXEC SCLIST观察结果(2)带参数的存储过程如:传入一个学生的学号与姓名,显示出这个学生选修的课程号,成绩CREATE PROC SC02_PROC@XH VARCHAR(10)ASSELECT CNO , GRADEFROM SC02WHERE SC02.SNO=@XH执行存储过程:EXEC SC02_PROC ‘200512’5.存储过程的相关操作(1) 查看存储过程:SP_HELP SCLIST(2) 重命名存储过程SP_RENAME ‘SCLIST’, ‘STUDENTSCORE’重新执行:说明XSDA1表格不存在,已被重命名●设计性实验1.实验要求(1) 调用帮助系统来查找系统存储过程或函数来显示SQL SERVER的版本号及当前系统时间。

(提示:到帮助中根据关键字等查询到对应的函数或存储过程来完成任务)SQL语句:DECLARE @DATE DATETIMESET @DATE=GETDATE()SELECT @DATE AS'系统时间'SELECT@@VERSION AS'系统版本号'执行结果:(2) 编写存储过程:完成1!+2!+…+N!的计算。

(提示:传入参数N,根据N用循环控制来求对应的值)SQL语句:CREATE PROC JIEHE_PROC@I INT, @J INT, @N INT, @W INT, @S INTASWHILE @I<=@NBEGINWHILE @J<=@IBEGINSET @W=@W*@JSET @J=@J+1ENDSELECT @S=@S+@WSELECT @I=@I+1ENDSELECT @S AS'总和'SELECT @W AS'阶乘值'EXEC JIEHE_PROC 1,1,4,1,0SP_HELP JIEHE_PROC执行结果:执行存储过程:查看存储过程:(3)将S表中的DEPA字段内容改为中文:IS-信息系,CS-计算机系,PH-物理系,MA-数学系。

(提示:用UPDATE语句来修改DEPA字段,DEPA的值根据不同英文缩写要修改为不同的中文系名,用CASE函数来完成)SQL语句:UPDATE S02 SET DEPA=CASE DEPAWHEN'计算机系'THEN'CS'WHEN'IS'THEN'信息系'WHEN'MA'THEN'数学系'WHEN'PH'THEN'物理系'ENDSELECT*FROM S02执行结果:原来表中的内容:执行修改后:(4) 将C02表上增加一个字段seleNUM,并编写存储过程:传入学号和课程号后,完成在SC02表中插入相应的选课记录,并在C表中对应课程的SELENUM加1。

原C02表:SELECT*FROM C02增加一个字段:ALTER TABLE C02ADD seleNUM INTGOSELECT*FROM C02显示有:传入数据:UPDATE C02SET SELENUM=(SELECT COUNT(SNO)FROM SC02WHERE CNO=O)SELECT*FROM C02插入数据:CREATE PROC addSeleNum@SNO VARCHAR(10),@CNO VARCHAR(10)ASINSERT INTO SC02(SNO,CNO)VALUES(@SNO,@CNO) UPDATE C02SET SELENUM=SELENUM+1 WHERE CNO=@CNO显示存储结果:EXEC addSeleNum '201112','C02'SELECT*FROM C02目录显示:2.思考题(1)简单描述存储过程的使用步骤?存储过程就是作为可执行对象存放在数据库中的一个或多个SQL命令。

1)创建存储过程使用:CREATE PROC存储名字(按对应的要求声明参数)。

在对应的表格的可编程性查看是否已建立存储;2)编写相应的存储内容;3)执行存储过程使用:EXEC存储名字对应的输入参数;4)也可使用SP_HELP存储名字查看存储过程,也可使用DROP PROC 存储名字删除存储过程(2)带参数的存储过程定义时参数定义语句可以在AS后面吗?使用验证题4(2)修改得到出错:说明不能把AS放在参数声明之后。

五、实验小结六、附录《网络编程技术与应用》。