- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
游标可以嵌套 参见P182例7-3 注意@@FETCH_STATUS的使用 存储过程应用举例 例7-5. 使用简单过程(不使用任何参数) 查询所有职工信息(姓名、仓库号、工资、所在城市) 例7-6. 使用带有参数的简单过程 返回指定城市的职工信息 例7-7. 使用带有参数和返回值的简单过程 查询指定仓库订单金额大于指定值的订单数,查询结果通过RETURN语句返回 存储过程应用举例 例7-8. 使用带有通配符参数的简单过程 返回指定的一些供应商的信息(提供供应商名称中的关键字) 例7-9. 使用 OUTPUT 参数 指定供应商所经手订购单的数量和平均金额,一个参数传入指定供应商名,一个参数传出计算的订单数量,计算的平均金额用RETURN语句返回 例7-10. 使用 cursor 数据类型的参数 在存储过程中使用游标 获得有关存储过程的信息 存储过程的定义可以通过当前数据库的sys.sql_modules和sys.objects系统视图查询到 SELECT definition FROM sys.sql_modules JOIN sys.objects ON sys.sql_modules.object_id = sys.objects.object_id WHERE TYPE = P 在数据库设计阶段设计存储过程 使用存储过程也是数据库设计阶段要考虑的内容之一,根据业务需求和开发者的经验可以灵活使用存储过程。 使用存储过程,可以: 提高系统的开发效率和运行效率 使数据查询和操作更简单 使数据更安全 数据库设计者可以在物理数据模型设计阶段进行存储过程的设计。 在PowerDesingner的物理数据模型(PDM)设计阶段可以设计存储过程。 7.2.7 用户定义函数 SQL Server还可以定义用户函数,用户函数和存储过程的基本思想是一样的,只是定义和使用方法有一些区别。 例7-11 用函数实现例7-7存储过程的功能。 CREATE FUNCTION 订货.udfGetOrderNum (@whno char(6),@sum money) RETURNS int WITH EXECUTE AS CALLER AS BEGIN DECLARE @count int SELECT @count=COUNT(*) FROM 订货.订购单 WHERE 金额=@sum AND 经手人 IN (SELECT 职工号 FROM 基础.职工 WHERE 仓库号=@whno) RETURN @count END 调用udfGetOrderNum函数: PRINT WH1仓库金额在1000以上的订单数是:+ STR(订货.udfGetOrderNum(WH1,1000)) 7.3 触发器及其用途 触发器可以看作是一类特殊的存储过程,它在满足某个特定条件时自动触发执行。触发器和存储过程同是提高数据库服务器性能的有力工具。 7.3.1 基本概念 触发器是一种程序或是一种过程,它和存储过程一样是事先设计好存储在数据库中的,与存储过程不同的是触发器不需要专门调用或执行,触发器是在某个特定条件发生时自动触发执行的。 分为DML(数据操作语言)触发器、DDL(数据定义语言)触发器和LOGIN触发器 DML触发器在执行数据操作语言(Update、Insert和Delete)时触发 DDL触发器在执行数据定义语言时触发 LOGIN触发器在有用户登录时触发 DML触发器 DML触发器也是一个数据库对象,但DML触发器依附于表(或视图)。 DML触发器分为插入触发器、删除触发器和更新触发器三类 触发器的三个要素: 定义触发器的表(或视图) 激活触发器的数据操作语句 采取的动作 建立触发器 ON指出定义触发器的表或视图 FOR INSERT、UPDATE或DELETE指出触发事件 sql_statement:触发器所采取的操作 CREATE TRIGGER [ schema_name . ]trigger_name ON { table | view } FOR { [ INSERT ] [ , ] [ UPDATE ] [ , ] [ DELETE ] } AS sql_statement 一个简单的建立触发器的例子 CREATE TRIGGER wh_trigger ON 仓储.仓库 FOR INSERT AS PRINT 插入了一个仓库元组 7.3.3 deleted表和inserted表 当DML触发器激活时系统会自动产生两个特殊的临时表:deleted表和inserted表 当发生INSERT操作时新插入的记录也存储在inserted表 当发生DELETE操作时被删除的记录也存储在delet
原创力文档


文档评论(0)