存储过程中的代码,是否可以“重构”呢?

littlefat 2004-06-29 09:16:27
我感觉SQL SERVER中的存储过程之间没有太大的联系,不像其他高级语言一样,可以有子过程、函数、方法等等。这样导致存储过程中会出现大量类似的代码。。。

例如,我的一个应用系统中,包含下面片断的代码和N多处:

--检查账户类型
Select (...)
IF @@RowCount=0
Begin
Set @RetMsg='指定的账户类型不存在! '
Return(1)
End

(返回一个错误,@RetMsg提示信息将会显示在客户端)

还有带RollBack的:

Begin Tran

Insert Into (...)

IF (@@Error!=0)
Begin
Set @RetMsg='添加记录基本信息时发生错误!请联系管理员。 '

RollBack Tran
Return(1)
End

这样的片断实在是太多了,Begin...End之间的代码几乎是完成同样的事情。我想,是否有办法将这部分优化,将Begin...End之间的代码放到一个过程中完成呢?就是类似以下的代码:
Select (...)
IF @@RowCount=0
ErrorReturn('指定的账户类型不存在! ',1) --返回错误代码1,并返回一个错误提示

或者:
Begin Tran

Insert Into (...)

IF (@@Error!=0)
ErrorRollBack('添加记录基本信息时发生错误!请联系管理员。',1) --返回错误代码1和一个错误提示,并回滚

谢谢!


...全文
55 点赞 收藏 1
写回复
1 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
zjcxc 2004-06-29
1.SQL的存储过程支持嵌套,所以可以将公用处理写成单独的存储过程,其他存储过程如果需要
可以调用它

2.存储过程中,可以通过exec来执行动态生成的SQL语句,这样你就可以写公用的存储过程
通过参数传递来指定要处理的对象

3.SQL毕竟是数据库,着重在数据处理方面,所以该用程序处理的,还是要放在程序中去处理
不要一味的把什么处理都放在数据库中,那样反而不能充分发挥数据库和程序的优势.
回复
发帖
疑难问题
创建于2007-09-28

2.1w+

社区成员

MS-SQL Server 疑难问题
申请成为版主
帖子事件
创建了帖子
2004-06-29 09:16
社区公告
暂无公告