随笔-65  评论-1102  文章-2  trackbacks-35

因为新项目需求正在整理,所以今天帮单位一个同事改程序..就是一个十几个页面的小东西而已..本着轻松的心态开始动手..花几个小时改完后就可以去泡MM了(偶是程序员中最缺MM的^_^)..谁知道这一改花了偶一天时间啊..郁闷死了..
主要原因不是偶菜..而是因为这个小东西居然用了几十个存储过程!!!唉..真是长江后浪推前浪啊!!!我如果要修改一个存储过程的话,修改花5分钟..找存储过程的时间最少也需要花5分钟.尤其是到了最后...等我改到第三个的时候..唉..眼睛都已经成斗鸡眼了...坚持到现在...处于盲人状态...最气愤的是,有N多个存储过程的语句都是为了只执行一句insert,insert,update,delete语句的....看来我这位老大真的是严格按照[尽量使用存储过程]的金科玉律来写代码..无语了..

或许你会说,按照字母排序啊..这位大哥的存储过程按照严格的命名方式来命名..全部的存储过程名称前都统一加了D...唉..最后的希望破灭了...如果谁能在大量的存储过程中解决这个问题..请给偶留言告诉方法..谢谢了..要不让以后要是再这样..偶这双可爱的大眼睛就毁了..

另外,也请大家避免这样的错误,给以后的维护人员造成类似我这样的结果..

posted on 2005-08-09 19:01 难得一蠢 阅读(1884) 评论(40)  编辑 收藏 所属分类: 思绪随说

评论:
#1楼  2005-08-09 19:42 | Dream world 梦想天空      
同情,牢记!~~~有空欢迎回访我的主页,赫赫:)
  回复  引用  查看    
#2楼  2005-08-09 20:15 | neuhawk [未注册用户]
我很少用存储过程.

  回复  引用    
#3楼  2005-08-09 20:26 | 湘南和也      
嗯,我觉得有些人确实走入误区了,经常为了写存储过程而写,而不想想写了有什么好处。
  回复  引用  查看    
#4楼  2005-08-09 20:37 | commenter [未注册用户]
我的存储过程命名方法是这样地:

sp_文件名称_事件名称_执行命令_编号

例如Default.aspx的Page_Load事件里的第一个执行SELECT命令的存储过程就命名为

sp_default_page_loag_select1

怎么样,很容易找到对应的代码段吧
  回复  引用    
#5楼  2005-08-09 20:38 | commenter [未注册用户]
哦,应该是sp_default_page_load_select1,不留神打错了。
  回复  引用    
#6楼  2005-08-09 20:44 | 極速麻醉 [未注册用户]
很少用存儲過程。程序一改動改起來很費事!

  回复  引用    
#7楼  2005-08-09 20:45 | leafyoung      
还是不要用sp_前缀的好,据说SQL Server看到这样的前缀会首先假定这时一个系统存储过程,在排除这种可能之后在按照普通名称进行定位,因此这样做会降低效率的说, 可以使用其他前缀,比如usp_,呵呵
  回复  引用  查看    
#8楼  2005-08-09 20:56 | 木野狐      
@commenter:

这个做法我认为不利于分层和代码重用。
  回复  引用  查看    
#9楼  2005-08-09 21:06 | 铱星      
不用和滥用都是不可取的,应根据情况而使用
  回复  引用  查看    
#10楼  2005-08-09 23:41 | commenter [未注册用户]
@leafyoung:

关于您的说法,不太正确。此种情况只在SQL SERVER 2005里会出现,SQL SERVER 2000中不存在您说的问题。

@木野狐:

使用这种命名方式本来就没考虑其他的,只是为了方便项目团队快速开发。
  回复  引用    
#11楼  2005-08-09 23:44 | commenter [未注册用户]
比起使用"usp_"做前缀,我更喜欢使用"dbo.sp_":)
  回复  引用    
#12楼  2005-08-10 00:17 | kwklover      
sp做前缀一般是不推荐的,因为SQLSERVER默认认为SP开头的是系统存储过程,所以性能方便会有一定影响,

一般都是以p开头表示存储过程,但是如果一个系统有上百个存储过程,用p开头还是不好定位啊,所以如果一个系统不会同时大量用上view,function,stored procedure的话,我觉得还是这样命名好点:

系统模块名_存储过程名

这样方便查找


  回复  引用  查看    
#13楼  2005-08-10 00:27 | Austin [未注册用户]
写一个macro, 让 VS 2003 帮你找 stored procedure.
以你vs中的data connection name 代替以下代码中的“ElvisDev”
使用方法:VS中选择storedProcedure名,执行macro即可。
可以把macro作为安装到工具条中,使用时点一下即可。

Sub SP_Finder()
SpName = DTE.ActiveDocument.ActiveWindow.Selection.Text
DTE.ExecuteCommand("View.ServerExplorer")
DTE.ActiveWindow.Object.GetItem("Data Connections").UIHierarchyItems.Expanded = True
DTE.ActiveWindow.Object.GetItem("Data Connections\ElvisDev").Select(vsUISelectionType.vsUISelectionTypeSelect)
DTE.ActiveWindow.Object.DoDefaultAction()
DTE.ActiveWindow.Object.GetItem("Data Connections\ElvisDev\Stored Procedures").Select(vsUISelectionType.vsUISelectionTypeSelect)
DTE.ActiveWindow.Object.DoDefaultAction()
DTE.ActiveWindow.Object.GetItem("Data Connections\ElvisDev\Stored Procedures\" + SpName).Select(vsUISelectionType.vsUISelectionTypeSelect)
End Sub
  回复  引用    
#14楼  2005-08-10 01:13 | Jason.NET      
我超喜欢用过程,一般一个系统不下百个过程,每个过程最少50行... 多则近千行
偶还喜欢用View,Function ...
偶觉得挺好啊,改起来挺顺手的,最重要是不需要去查源代码,不需要重新编译
你不知道有个东西叫做 Profiles 吗?

  回复  引用  查看    
#15楼 [楼主] 2005-08-10 07:51 | 难得一蠢      
其实查找存储过程,查看存储过程可以使用,SQL Server中的导出存储过程为SQL语句..然后在记事本中打开可以用查找功能很快的搜索到...关键是要SQL Server中修改存储过程的时候.就必须定位到存储过程后才可以..

关于存储过程的命名,我觉得可以按照:功能_表名_添加人的唯一标识名..这样命名不仅可以在用字母排序后快速查找..而且也可以了解添加人员..

to:Jason.NET

能请教一下你的那么多存储过程是如何管理,方便定位的吗??VIEW和Function我也经常用.当时都是在有复杂查询的时候才会写...
  回复  引用  查看    
#16楼  2005-08-10 07:57 | zitiger      
我也喜欢用存储过程,程序里全部用存储过程,这样代码结构很清楚,不然一会存储过程一会SQL语句肯定晕倒的

我的命名方法是 方法+表名+By+字段
如Select_Users_By_UserName
  回复  引用  查看    
#17楼  2005-08-10 08:37 | Sadly_Lee      
我極少用存儲過程,可能是我做的項目太小,或者還沒休會到過程的好處吧
  回复  引用  查看    
#18楼  2005-08-10 09:26 | guaiguosh [未注册用户]
深有同感,不只是维护,开发的时候也挺麻烦的。
我还记得以前有一个开发多年的人对我说,开发时把所有的sql都要写到sp里,现在想想真后怕,要是我按照她那么做的话,就完了,累死人了。
同意楼主,我最恨写sp了,除非不得已。
  回复  引用    
#19楼  2005-08-10 09:27 | idior      
#20楼 [楼主] 2005-08-10 09:33 | 难得一蠢      
存储过程是可以用,并且也推荐用..但是也需要按照条件和功能需求不同而使用..我这位同事的做法就是太烂用存储过程了..这样的教训是深刻的..他现在做的东西很小.10几个页面就用了几十个..如果20个页面呢?30个呢?很难想象维护一个存在上百个存储过程的情况是多么的艰难..
  回复  引用  查看    
#21楼  2005-08-10 09:52 | 铱星      
做存储过程,应该结合数据库设计用的建模工具使用,这样存储过程的查找也很方便,另外,想存储过程修改后,都可以用系统生成的脚本更新数据库,同时等于也增加了日志,方便以后查看修改记录
我们有很多工具可用的情况下,还是借助工具,让自己把精力放在设计本身上
  回复  引用  查看    
#22楼  2005-08-10 10:04 | mmkk [未注册用户]
我们所有的应用程序都使用存储过程,面对的是几十个G的数据,从来不用inline-sql,所有应用程序的sp恐怕不下几千个了吧,如lz所说,的确有时候会进入一种误区,特别是我在美国的同事,超级喜欢将很多的逻辑写在一个存储过程中,尤其是欠套的存储过程,维护起来相当困难,我刚刚尝试过这种痛苦.相比之下我更愿意将逻辑在代码中显式反映出来,对于维护人员更加直观,sp的命名一定要有一套规范,至于lz所说的查找sp的问题,在企业管理器里面找当然麻烦,自己写个小程序就可以很快地找到sp了.不管怎么说,我个人也更加喜欢用储存过程,尤其当我面对的数据库目标非常明确的时候.
  回复  引用    
#23楼  2005-08-10 10:32 | James      
就我个人而言,非常厌恶使用存储过程。

ps:我以前曾经写过大把的存储过程。
  回复  引用  查看    
#24楼  2005-08-10 11:28 | spidertan [未注册用户]
最好还是少使用存储过程,因为这样作会使系统兼容性比较差,写到代码中的话,维护起来容易!
  回复  引用    
#25楼 [楼主] 2005-08-10 11:40 | 难得一蠢      
呵呵..谁有自动生成存储过程的工具或者管理存储过程的工具..分享下..免的大家将来都成盲侠....

我主要是做框架和接口设计..而且我建议我的团队中的人员使用存储过程.因为确实提高效率和速度..但是这次意外让我发现管理存储过程的重要性..在VS中管理类很方便..直接转到定义就OK..如果存储过程也能像这样查找修改就好多了..
  回复  引用  查看    
#26楼  2005-08-10 12:18 | 木野狐      
CodeSmith 可以生成 CRUD 操作的存储过程,也支持自己写模版定义复杂一些的。
  回复  引用  查看    
#27楼  2005-08-10 13:19 | 活靶子 [未注册用户]
强烈建议您不要创建以 sp_ 为前缀的存储过程。SQL Server 始终按照下列顺序查找以 sp_ 开头的存储过程:

在 master 数据库中查找存储过程。


根据所提供的任何限定符(数据库名称或所有者)查找该存储过程。


如果未指定所有者,则使用 dbo 作为所有者查找该存储过程。
因此,虽然当前数据库中可能存在带 sp_ 前缀的用户创建的存储过程,但总会先检查 master 数据库(即使该存储过程已用数据库名称限定)。


  回复  引用    
#28楼  2005-08-10 13:32 | ayya__@hotmail.com [未注册用户]
建议用动词作为存储过程开头,不加前缀,存储过程是和表有关的,跟页面没什么关系.
一个表通常只有几个基本的CRUD存储过程.并且可以用工具自动生成存储过程.
不推荐sql写到代码里面的做法,很难维护!!!
  回复  引用    
#29楼  2005-08-10 14:11 | 十八点三十      
存储过程和写到程序里,哪个速度快?
  回复  引用  查看    
#30楼  2005-08-10 14:51 | 蛙蛙池塘      
不推荐存储过程使用任何前缀.也不推荐在存储过程里实现过于复杂的业务逻辑.
  回复  引用  查看    
#31楼  2005-08-10 14:52 | 蛙蛙池塘      
idior推荐的怎么是英文的文章呀.
  回复  引用  查看    
#32楼  2005-08-10 15:04 | baikaishui [未注册用户]
偶用存储过程主要是为了事务回滚,约束等功能
当然也有速度上考虑


  回复  引用    
#33楼  2005-08-10 15:38 | baikaishui [未注册用户]
不过找存储过程其实还蛮方便的
系统提供了很多系统表
很容易通过语句可以找到
  回复  引用    
#34楼 [楼主] 2005-08-10 16:02 | 难得一蠢      
To:活靶子
我明白你的意思..查找名字很简单..关键是难在,在几十甚至上百个存储过程的列表中查找到你需要的存储过程是很困难..

To:十八点三十
存储过程对于大访问量的web站点来说,是非常重要的.因为存储过程执行一次后就缓存了..存储过程也可以看做是预先定义好的SQL语句一样..

To:蛙蛙池塘
支持蛙蛙的观点.存储过程的识别名我认为可以放在和面..例如UserIsOnline_user_Li
其中Li就是个人标识..对于复杂的业务关系不要在存储过程中是因为存储过程主要做数据处理..如果将业务逻辑放在存储过程中对于层次和效率,维护等各方面来说都会带来麻烦的...
  回复  引用  查看    
#35楼  2005-08-13 11:34 | 风一样的男人 [未注册用户]
呵呵,主要是楼主一直想着泡MM,一心不能二用,所以导致开发效率比较低,花费了1天的时间。
如果以平常的心态来做这件事的话,有可能只需要半天就可以搞定的。^_^

  回复  引用    
#36楼  2005-08-16 22:37 | IT      
我觉得用储存过程好啊,不用重新编译,而且网络传输的数据也少,请问不用储存过程,用什么方法写这么多的SQL语句啊,难道写到程序里吗???
  回复  引用  查看    
#37楼 [楼主] 2005-08-18 18:20 | 难得一蠢      
对于少量的查询语句写再程序中完全可以啊..对于复杂还是推荐使用存储过程..并不是一棒子打死...
  回复  引用  查看    
#38楼  2005-09-27 13:07 | 宝剑·123钢铁·123steel.cn      
推荐不要用 sp_坐存储过程的前缀;;
我一般用 p_
  回复  引用  查看    
#39楼  2007-12-07 10:52 | yiyanxiyin      
你要修改存储过程是吧?

在查询分析器里面执行

sp_helptext '存储过程名'

这样就不用为了找名字而花眼了噻
  回复  引用  查看    
#40楼  2007-12-07 10:53 | yiyanxiyin      
我的blogs中有更好的办法,你可以去看看
  回复  引用  查看    

标题  
姓名  
主页
Email (只有博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      


相关链接: