游标规则用户自定义函数.ppt_第1页
游标规则用户自定义函数.ppt_第2页
游标规则用户自定义函数.ppt_第3页
游标规则用户自定义函数.ppt_第4页
游标规则用户自定义函数.ppt_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

,游标,2,本章目标,游标的使用 规则的使用 自定义函数,游标引例,以前:使用SELECT语句对表格进行查询,返回的结果集包括所有满足条件的行。 思考:如果要求每次只显示表格(例如上面的Course表)中的一行,该如何处理?这在将T-SQL嵌入到其他高级语言(如C、VC、Delphi等)的编程中经常用到。,游标概述,可以将游标看作一种特殊的指针,它可以指向与它相关联的结果集中的任意一行,以便对当前位置的行进行处理。 游标提供了对一个结果集进行逐行处理的能力: 在结果集中定位特定行 从结果集的当前位置检索行 支持对结果集中当前位置的行进行数据处理(修改/删除),使用游标的步骤,声明游标 打开游标 处理数据(读取/修改/删除)可以和其他T-SQL语句配合灵活使用 关闭游标(与打开游标配对) 删除游标(与声明游标配对,此时释放分配给游标的所有资源) 【问题】游标基本使用的例子,相关语法格式,声明游标 DECLARE cursor_name CURSOR FORWORD_ONLY|SCROLL FOR select_statements 打开游标 OPEN cursor_name 使用游标 FETCH NEXT|PRIOR|FIRST|LAST FROM cursor Into variable_name 关闭游标 CLOSE cursor_name 删除游标 DEALLOCATE cursor_name,例子,declare tName varchar(100) declare myCursor cursor for select name from systypes open myCursor fetch next from myCursor into tName while fetch_status=0 begin print(tName) fetch next from myCursor into tName end close myCursor deallocate myCursor,注意须序 o.,在写SQL存储过程和触发器的时候,经常会用游标,一用到游标就要循环,练习1,声明一个名为CrsStudent的游标,使其与“00电子商务班”的所有学生信息(学号、姓名)相关联,并逐行显示前三条学生信息,使用fetch_status: 该全局变量/配置函数返回被最后FETCH语句执行的游标的状态,返回类型为int: 0:FETCH语句成功 1:FETCH语句失败或此行不在结果集中 2:被提取的行不存在,练习2,使用游标遍历Course表,输出报名人数最多的课程的信息(课程编码、课程名称、报名人数),练习3,建立一个存储过程,利用游标求course表中某系(用户给定系代码)所开课程的最大报名人数,并把课程名称和最大报名人数作为输出变量返回给用户。,规则,创建具有范围的规则,CREATE RULE range_rule AS range= $1000 AND range $20000,用以限制插入该规则被绑定到的列中的整数的范围,创建具有列表的规则,CREATE RULE list_rule AS list IN (1389, 0736, 0877),用于将输入到该规则被绑定到的列中的实际值限制为只能是该规则中列出的值,创建具有模式的规则,CREATE RULE pattern_rule AS value LIKE _-%0-9,创建一个遵循这种模式的规则:任意两个字符的后面跟一个连字符 (-) 和任意多个字符(或没有字符),并以 0 到 9 之间的整数结尾,将规则绑定到列,exec sp_bindrule range_rule,teaInfo.Salary,注意 1.规则名和表中的列必须用 2.规则名和表中的列之间用,将规则绑定到别名数据类型,EXEC sp_bindrule rule_ssn, ssn,1.在 CREATE TABLE 语句中,类型为 ssn 的列会继承 rule_ssn 规则。 2.类型为 ssn 的现有列也会继承 rule_ssn 规则,除非为 futureonly_flag 指定了futureonly,或者在 ssn 上直接绑定了规则。 3.绑定到列的规则始终优先于绑定到数据类型的规则。,规则名,别名数据类型,与自定义数据类型相关的存储过程 sp_addtype 添加一个自定义数据类型 sp_droptype 删除一个自定义数据类型 Exec sp_addtype AccountType,varchar(20),not null Exec sp_droptype AccountType -先删除使用了该类型的表 create table AccountInfo(accID AccountType),使用 futureonly_flag,EXEC sp_bindrule rule_ssn, ssn, futureonly,将 rule_ssn 规则绑定到别名数据类型 ssn。由于已指定 futureonly,因此不影响类型为 ssn 的现有列,规则名,别名数据类型,缺省,缺省的创建 create default d_Date as getdate(),绑定缺省 exec sp_bindefault d_Date, stu.goSchDate ,自定义函数,21,Datepart参数(补充),Datepart参数可用的值 Year yy, yyyy quarter qq, q Month mm, m dayofyear dy, y Day dd, d Week wk, ww Hour hh minute mi, n second ss, s millisecond ms,22,用户自定义函数,用CREATE FUNCTION创建自定义函数 语法格式: CREATE FUNCTION 所有者名称.函数名 ( 参数名称 AS 数据类型 =默认值 , n ) RETURNS 返回值类型 AS BEGIN 函数体SQL语句 RETURN 数值表达式 END,SQL Server 2005允许用户自己定义所需要的函数。,23,用CREATE FUNCTION创建自定义函数,说明: l 自定义函数必须在当前数据库中定义。 l 函数名:必须符合标识符构成规则,在数据库中名称必须惟一,省略所有者名称默认为系统管理员dbo。 l 参数名称:用局部变量定义的形式参数,用于接收调用函数时传递过来的参数。 l 默认值必须是常量,如果设定了默认值则调用函数时若不提供参数,形式参数自动取默认值。 l RETURNS指定返回值类型,RETURN指定返回值,注意这两个关键字的区别。 l 自定义函数的调用与系统标准函数的调用相同,但必须写出“所有者名称.函数名”并在圆括号内给出参数。,24,用CREATE FUNCTION创建自定义函数,【例】定义一个根据出生日期求指定年份对应年龄的函数 在数据库diannaoxs中创建一个名为“相对年龄”的用户自定义函数,根据员工的“出生日期”和“指定年份”计算员工到指定年份时的年龄。 USE diannaoxs GO CREATE FUNCTION 相对年龄 (出生年月 Datetime,defyear int) RETURNS int AS BEGIN RETURN defyear-year(出生年月) END GO 如果在员工表查询到2008年小于30岁的员工,则可使用以下代码: SELECT 姓名,出生日期,到2008的年龄=dbo.相对年龄(出生日期, 2008) FROM 员工表 WHERE dbo.相对年龄(出生日期, 2008)30 注意:函数名前的所有者名称dbo不能省略。,Begin-End不能少,调用函数(dbo.不能少) select dbo.func_date(2009-2-2),返回类型为表格,调用函数的语法(函数语句中不需要begin-end):select * from func_tableIdsfs(),25,用SQL语句修改、删除自定义函数,1、使用ALTER FUNCTION语句修改自定义函数 ALTER FUNCTION语句语法与CREATE FUNCTION基本相同 2、使用DROP FUNCYION语句删除自定义函数 语法格式: DROP FUNCYION 所有者名称.函数名称 , n 使用DROP FUNCYION可一次删除多个自定义函数。 使用系统存储过程sp_droptype也可以删除自定义函数。,26,存储过程与用户自定义函数,存储过程是使用EXEC命令独立调用的,而用户自定义函数是在另一个SQL语句中调用的 函数必须始终返回一个值(一个标量值或一个表格)。而存储过程可以返回一个标量值、一个表值或无需返回值,27,存储过程与用户自定义函数,存储过程与用户自定义函数都可以返回表 create procedure proc_test as select * from stuinfo create function funcTest() returns

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论