欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 产业 > SQL Server 存储过程开发三层结构规范

SQL Server 存储过程开发三层结构规范

2025/5/9 1:21:59 来源:https://blog.csdn.net/u010362741/article/details/147756329  浏览:    关键词:SQL Server 存储过程开发三层结构规范

以下是《SQL Server 存储过程开发三层结构规范》的正式文档结构,适用于企业级数据库应用开发场景,有助于团队协作、代码审查与自动化运维:


📘 SQL Server 存储过程开发三层结构规范

一、架构设计总览

三层结构简介

层级命名约定主要职责
主业务层(Main)sp_<模块名>_<功能名>_main控制业务主流程,负责对外接口
事务控制层(Tx)sp_<模块名>_<功能名>_tx管理事务边界与子功能协调
基础功能层(Fn)sp_<模块名>_<功能名>_fn_<功能名>实现原子功能逻辑,便于复用

二、命名规范

  • 模块名、功能名采用小写英文下划线分隔,表达清晰业务含义。

  • 所有存储过程前缀统一使用 sp_

  • 示例:

    • 主业务层:sp_order_create_main

    • 事务控制层:sp_order_create_tx

    • 基础功能层:sp_order_create_fn_inventory


三、各层职责定义

🔷 1. 主业务层(Main)

内容要求
输入参数仅接收应用调用层传入的业务参数
调用形式只调用对应的 _tx 层过程
日志可打印起始日志,但业务日志由 Tx 层统一处理
返回形式SELECT 200 AS code, '成功' AS msg,可附带业务ID等字段
约束不直接处理事务,不访问数据库表,不直接嵌入业务逻辑

✅ 面向应用系统的唯一调用入口。


🔷 2. 事务控制层(Tx)

内容要求
输入参数继承主层参数,并补充必要中间参数
输出参数必须提供 @ResultCode@ResultMsg
事务控制必须包含 BEGIN TRAN / COMMIT / ROLLBACK
异常处理使用 TRY...CATCH 捕获所有异常并回滚事务
日志统一调用 sp_log_errorsp_log_trace 等日志过程
调用只调用 fn_ 前缀的功能层过程,保证原子性

✅ 是事务安全与一致性的守护者。


🔷 3. 基础功能层(Fn)

内容要求
功能粒度单一职责,易于复用和测试
输入/输出使用参数或表变量作为输入输出
不包含事务控制、异常捕获、日志打印、SELECT 输出
命名sp_<模块名>_<功能名>_fn_<功能子项>,如 sp_order_create_fn_price

✅ 聚焦功能实现,保持高内聚低耦合。


四、错误处理与返回标准

错误输出结构

SELECT 500 AS code, ERROR_MESSAGE() AS msg;

成功输出结构

SELECT 200 AS code, '处理成功' AS msg, @OrderId AS order_id;

日志规范

  • 错误日志过程:sp_log_error(@ProcName, @ErrMsg)

  • 操作日志过程:sp_log_trace(@ProcName, @Detail)


五、标准开发模板

✅ 主业务层模板(Main)

CREATE PROCEDURE sp_user_register_main@UserName NVARCHAR(50),@Password NVARCHAR(50)
AS
BEGINDECLARE @ResultCode INT, @ResultMsg NVARCHAR(200);EXEC sp_user_register_tx@UserName = @UserName,@Password = @Password,@ResultCode = @ResultCode OUTPUT,@ResultMsg = @ResultMsg OUTPUT;SELECT @ResultCode AS code, @ResultMsg AS msg;
END

✅ 事务控制层模板(Tx)

CREATE PROCEDURE sp_user_register_tx@UserName NVARCHAR(50),@Password NVARCHAR(50),@ResultCode INT OUTPUT,@ResultMsg NVARCHAR(200) OUTPUT
AS
BEGINBEGIN TRYBEGIN TRAN;EXEC sp_user_register_fn_check @UserName;EXEC sp_user_register_fn_insert @UserName, @Password;COMMIT TRAN;SET @ResultCode = 200;SET @ResultMsg = '用户注册成功';END TRYBEGIN CATCHROLLBACK TRAN;SET @ResultCode = 500;SET @ResultMsg = ERROR_MESSAGE();EXEC sp_log_error 'sp_user_register_tx', @ResultMsg;END CATCH
END

✅ 基础功能层模板(Fn)

CREATE PROCEDURE sp_user_register_fn_insert@UserName NVARCHAR(50),@Password NVARCHAR(50)
AS
BEGININSERT INTO Users(UserName, PasswordHash)VALUES (@UserName, HASHBYTES('SHA2_256', @Password));
END

六、附加建议

方面建议
模块组织按模块分类存储过程脚本文件夹
CI/CD建议使用脚本版本控制系统,如 Flyway、DbUp
安全性权限隔离,开发只读,发布执行权限
单元测试为每个 fn_ 层编写测试用例,确保幂等性
参数命名使用前缀 @in_, @out_ 可增强可读性(可选)

七、结语

本三层结构规范可适配于:

  • 高并发、高一致性交易系统(如订单、支付)

  • 多人协作、多阶段开发流程

  • 数据中台及多租户服务架构

通过主业务抽象化、事务封装化、功能原子化,提高可维护性、可测试性和系统稳定性。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词