预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共56页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

计算机学院杜海舟第五章存储过程、触发器和数据完整性5.1SQLServer编程结构2.为局部变量赋值可以采用SET语句或SELECT语句: SET@变量名=表达式 SELECT@变量名=表达式 SELECT列1,……,列n @变量名=表达式 FROM表名 WHERE条件表达式 5.1.2显示信息5.1.3注释语句5.1.4批处理5.1.5流程控制语句【例5.1】在电力抢修工程数据库中,如果stock表中存在库存量低于1的物资,就显示文本:theamountisnotenough;否则显示所有物资信息。3.WHILE循环语句 语法形式如下: WHILE逻辑表达式 语句 【例5.2】将stock表中所有物资单价增加10%,直到有一个物资单价超过15000或单价总和超过50000为止。 WHILE(SELECTsum(unit)FROMstock)<50000 BEGIN UPDATEstocksetunit=unit*1.1 IFEXISTS(SELECT*FROMstockWHEREunit>15000) break ELSE continue END4.GOTO语句 语法形式如下: GOTOlable …… lable: 6.WAITFOR语句 语法形式如下: WAITFOR{DELAY‘时间’|TIME‘时间’} 其中,DELAY表示等候由“时间”参数指定的时间间隔,TIME表示等候到指定的“时间”为止。时间参数的数据类型为datetime,但不带日期,格式为’hh:mm:ss’。【例5.3】使用WAITFOR语句表示等待一分钟后,显示stock表。等到中午12:00:00时,显示salvaging表。 WAITFORDELAY'00:01:00' SELECT*FROMstock WAITFORTIME'12:00:00' SELECT*FROMsalvaging7.CASE语句 (1)格式一 CASE<表达式> WHEN<条件表达式1>THEN<表达式1> [[WHEN<条件表达式2>THEN<表达式2>][…]] [ELSE<表达式n>] END 【例5.4】用CASE语句格式一实现:在对stock表的查询中,当仓库号的值是“供电局1号仓库”、“供电局2号仓库”、“供电局3号仓库”时分别返回“北京”、“上海”、“广州”,否则返回“未知”。 SELECTmat_num,mat_name,speci,amount,unit,total, warehouse=CASEwarehouse WHEN'供电局1#仓库'THEN'北京' WHEN'供电局2#仓库'THEN'上海' WHEN'供电局3#仓库'THEN'广州' ELSE'未知' END FROMstock(2)格式二 CASE WHEN<条件表达式1>THEN<表达式1> [[WHEN<条件表达式2>THEN<表达式2>][…]] [ELSE<表达式n>] END 【例5.5】用CASE语句格式二实现:在对stock表的查询中,当仓库号的值是“供电局1号仓库”、“供电局2号仓库”、“供电局3号仓库”时分别返回“北京”、“上海”、“广州”,否则返回“未知”。 SELECTmat_num,mat_name,speci,amount,unit,total, warehouse=CASE WHENwarehouse='供电局1#仓库'THEN'北京' WHENwarehouse='供电局2#仓库'THEN'上海' WHENwarehouse='供电局3#仓库'THEN'广州' ELSE'未知' END FROMstock5.2存储过程存储过程和非存储过程操作示意5.2.2创建存储过程1.基本存储过程2.带参数的存储过程【例5.8】创建一个带输入参数的存储过程,向stock表中添加一个新的数据行。 CREATEPROCEDUREexp3 @mnochar(8),@mnamevarchar(50),@mspecivarchar(20) AS INSERT INTOstock(mat_num,mat_name,speci) VALUES(@mno,@mname,@mspeci) 执行该存储过程: EXECUTEexp3'm030','护套绝缘电线','BVV-35' 或者: EXECUTEexp3@mno='m030',@mname='护套绝缘电线',@mspeci='BVV-35‘ 或者: EXECUTEexp3@mname='护套绝缘电线',@mspeci='BVV-35',@mno='m030' 注意: 为了确保Create命令能成功执行,可以在CreateProcedure之前执行如下语句: IFEXISTS(SELECTnameFROMsysobjectsWHERE