资源描述:
《第10章--用户自定义函数与事务.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第10章用户自定义函数与事务学习目标1、用户定义函数的创建、修改及删除2、掌握事务处理的基本方法,编写事务处理程序解决一般的实际应用问题SQLServer不但提供了系统内置函数,而且还允许用户根据实际需要创建用户自定义函数。用户自定义函数是由一条或多条T-SQL语句组成的子程序,保存在数据库内。它可以具有多个输入参数,并返回一个标量值(单个数据值)或一个表。SQLServer支持三种类型的用户自定义函数:标量函数、表值函数及用户定义聚合函数。标量函数标量函数创建格式createfunction标量函数名(@参数1类型,@参数2类型2,[…n])returns返回值类型asbegi
2、nreturn返回值end【例10.1】使用命令行方式在Sales数据库创建名为Fn_Cost的自定义函数,用于计算Goods表的进货金额,并将其绑定到Goods表。usesalesgocreatefunctionfn_cost(@xint,@ymoney)returnsmoneyasbeginreturn(@x*@y)end使用标量函数在Goods表中增加一列,列名为金额,并将函数Fn-Cost与其绑定。金额列为计算列。计算列由可以使用同一表中的其他列的表达式计算得来。该表达式可以是非计算列的列名、常量、函数、变量,也可以是用一个或多个运算符连接的这些元素的任意组合。表达式不能
3、为子查询。计算列不允许直接修改列的值。altertablegoodsadd金额asdbo.fn_cost(数量,进货价)10.2.2表值函数1.内联表值函数2.多语句表值函数1.内联表值函数内嵌表值函数没有函数体,其返回的表是单个select语句的结果集。由于视图不支持在where子句的搜索条件中使用参数,内嵌表值函数可弥补视图的这一不足之处,即内嵌表值函数可用于实现参数化的视图功能。createfunction函数名(@参数1类型,@参数2类型2,[…n])returnstableasreturn(select语句)【例10.2】使用命令行方式在Sales数据库创建名为Fn_T
4、otal的自定义函数,用于统计Sell表在某一时间段内的销售情况。createfunctionfn_total(@btdatetime,@etdatetime)returnstableasreturn(selectgoods.商品名称,sell.数量fromgoods,sellwhere(sell.售出时间>=@btandsell.售出时间<=@etandgoods.商品编号=sell.商品编号))select*fromdbo.fn_total('2005-1-1','2005-1-31')2.多语句表值函数多语句表值函数的函数体在begin-end块中定义。函数体可以包含多条T
5、-SQL语句,这些语句可生成行并将行插入将返回的表中。由于视图只能包含单条select语句,而多语句表值函数可包含多条T-SQL语句。因此,多语句表值函数的功能比视图更强大。此外,多语句表值函数还可替换返回单个结果集的存储过程。createfunction函数名(@参数1类型,@参数2类型2,[…n])returns@函数名table(列名类型,[…n])asbegininsert@函数名select语句returnend【例10.3】使用命令行方式在Sales数据库创建名为Fn_Lan的自定义函数,该函数生成一张表,表的内容为进货价为指定价格以上的商品。createfuncti
6、onfn_lan(@pricemoney)returns@fn_lantable(商品编号intprimarykeynotnull,商品名称varchar(20)notnull,生产厂商varchar(30)notnull,进货价moneynotnull,进货时间datetimenotnull)asbegininsert@fn_lanselect商品编号,商品名称,生产厂商,进货价,进货时间fromgoodswhere(进货价>=@price)returnendselect*fromfn_lan(1000)10.3事务处理10.3.1事务简介事务是一个逻辑工作单元,其中包括了一系
7、列的操作,这些操作要么全部执行,要么都不执行。典型的事务实例是两个银行之间的转账,账号A转出1000元至账号B,这笔转账业务可分解为:(1)账号A减去1000元;(2)账号B增加1000元。当然,要求这两项操作要么同时成功(转账成功),要么同时失败(转账失败)。只有其中一项操作成功则是不可接受的事情。如果确实发生了只有其中一项操作成功的话,那么应该撤销所做的操作(回滚事务),就好像什么操作都没有发生一样。事务的4个属性属性特点原子性事务必须作为工作的最小单位,即原子单位。其所进行