《高性能的数据库》 第四讲 编程细节(2)
作者 佚名技术
来源 数据库编程
浏览
发布时间 2012-03-20
第四讲 编程细节(下部分) 1、触发器 2、游标 3、函数 4、存储过程 5、事务 --------------------- 作者:懒虫 # SapphireStudio . 欢迎访问我们的站点www.chair3.com 欢迎转载。 -------------------- 上次得到不少朋友的捧场,信心大增了:),决定趁着五一期间把它写完,反正外面非典厉害,也不好出去玩。这里讲到3、4、5了。 这里决定把4与3调换一下,先讲解4(存储过程,以下用sp来简称;函数,以下用fn来简称) 4、存储过程。 存储过程是数据库编程里面最重要的表现方式了。 呵呵,这里我要提到上次说道的:我拒绝使用触发器。这里我要开始猛批一顿触发器了。 在SQL 2000里,说实话,我实在找不出触发器可以存在的理由。回忆一下:触发器是一种特殊的存储过程。它在一定的事件(Insert,Update,Delete 等)里自动执行。我建议使用sp和级联来代替触发器。 在SQL 7 里面,触发器通常用于更新、或删除相关表的数据,以维护数据的完整。SQL 7里面,没有级联删除和级联修改的功能。 只能建立起关系。既然SQL 2000里面提供了级联,那么触发器就没有很好的存在理由。更多的情况下是作为一个向下兼容的技术而存在。 当然,也有人喜欢把触发器作为处理数据逻辑,甚至是业务逻辑的自动存储过程。 这种方法并不足取。这里列举以下使用触发器的一些坏处: a、“地下”运行 。 触发器没有很好的调试、管理环境。调试一段触发器,要比调试一段sp更耗费时间与精力。 b、类似于goto语句。(过分自由的另外一个说法是:无政府主义!) 一个表,可以写入多个触发器,包括同样for Update的10个触发器!同样for Delete的10个触发器。也就是说,你每次要对这个表进行写操作的时候,你要一个一个检查你的触发器,看看他们是做什么的,有没有冲突。 或许,你会很牛B的对我说:我不会做那么傻B的事情,我记得住我做了些什么!3个月以后呢?10个月以后呢?你还会对我说你记得住么? c、嵌套触发器、递归触发器 你敢说你这么多的触发器中不会存在Table1更新了Table2表,从而触发Table2表更新TAble3,TAble3的触发器再次触发Table1更新Table2…… ?? 或许还会发生这种情况:你的程序更新了Table1.Fd1,触发器立马更新Table1.fd1,再次触发事件,触发器再次更新Table1.fd1…… 当然,SQL Server可以设置和避免应用程序进入死循环,可是,得到的结果,或许就不是你想要的。 …… 我想不出触发器更多的坏处了,因为我早就抛弃了它。算了,不批它了,酸是各人爱好把!我建议使用完全存储过程来实现数据逻辑和事务逻辑! 先讲讲sp的编写格式(我个人的编程习惯)。良好的习惯有助于日后的维护。 Create Proc spBuyBook( --@@存储过程头,包括名字、参数、说明文档 @iBookID int, --书的ID --@@参数 @iOperatorID int --操作员ID ) ------------------------------------------------------- @@说明文档 --Name : spBuyBook @@名字 --func : 购买一本书的业务逻辑 @@存储过程的功能 --Return: 0,正确;-1,没找到该书;-2,更新Book表出错;-3..... @@返回值解释 --Use : spDoSomething,spDoSomething2.... @@引用了那些外部程序,比如sp,fn,vw等 --User : 懒虫 @@该存储过程的使用者 --Author: 懒虫 # SapphireStudio (www.chair3.com) @@作者 --Date : 2003-5-4 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |
你可能对下面的文章感兴趣
上一篇: SQLServer数据库技术(09)下一篇: SQLServer数据库技术(11)
关于《高性能的数据库》 第四讲 编程细节(2)的所有评论