在以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