woaidongmao

文章均收录自他人博客,但不喜标题前加-[转贴],因其丑陋,见谅!~
随笔 - 1469, 文章 - 0, 评论 - 661, 引用 - 0
数据加载中……

如何减少存储过程过程的数量

在以Sqlserver为数据库的项目开发中。针对一个表可以通常有以下的操作。
(1) 增加 , 修改 , 删除 , 得到一行信息 , 得到多行信息 , 得到全部信息如果为每一个操作写一个操作过程那么。在系统中的存储过程将非常多

通过分析可以,对存储过程进行合并。以减少存储过程的量

例: 保存类别的一个存储过程 就将增加 和 修改进行了合并,通过输出函数变量来区分,什么是增加和修改 。以及执行过程出现的错误的状态值。


一、增加和修改存储过程的合并

CREATE PROCEDURE AppSpSaveCate
(
@pi_InfoId bigint,
@ps_CateName varchar(200),
@ps_CateCode varchar(200),
@ps_CateDesc varchar(200),
@ps_CateType varchar(200),
@pi_CateOrder int,
@pi_ParentId bigint,
@pi_status int output
)
AS
--增加
IF @pi_InfoId = 0
BEGIN
  INSERT INTO tbsCates
   (
    CateName,
    CateCode,
    CateDesc,
    CateOrder,
    ParentId,
    CateType
   )
   VALUES
   (
    @ps_CateName,
    @ps_CateCode,
    @ps_CateDesc,
    @pi_CateOrder,
    @pi_ParentId,
    @ps_CateType
   )
  
   SET @pi_status = 1
   IF @@ERROR <> 0 SET @pi_status = 999  
END
 
--修改
IF @pi_InfoId > 0
BEGIN
   UPDATE tbsCates SET
    CateName = @ps_CateName,
    CateCode = @ps_CateCode,
    CateDesc = @ps_CateDesc,
    ParentId = @pi_ParentId,
    CateType = @ps_CateType,
    CateOrder = @pi_CateOrder
   WHERE infoId = @pi_InfoId
   SET @pi_status = 2

END
IF @@ERROR <> 0 SET @pi_status = 999
 

GO

下面是得到一条信息 多条信息 以及全部信息的存储过程

CREATE PROCEDURE AppSpGetRoleMenuList
(
@ps_RoleCode varchar(100),
@pi_InfoId bigint,
@pi_DoCount int
)
AS
DECLARE @strSql varchar(1000)

--取出所有的数据
IF @pi_DoCount = 0
BEGIN
  SELECT * FROM tbsRoleMenus WHERE RoleCode = @ps_RoleCode ORDER BY MenuOrder desc
END
 

--得到一条数据
IF @pi_DoCount = 1
BEGIN
  SELECT * FROM tbsRoleMenus WHERE InfoId = @pi_InfoId
END
 

//取出top n条数据。通常用于首页的数据显示
IF @pi_DoCount >  1
BEGIN
  SET @strSql = 'select top ' + cast(@pi_DoCount AS varchar) + ' * from tbsRoleMenus where RoleCode =''' + @ps_RoleCode + ''' order by MenuOrder desc '
  EXEC @strSql
END

GO

posted on 2009-08-06 19:29 肥仔 阅读(262) 评论(0)  编辑 收藏 引用 所属分类: 数据库


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理