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