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_ 可增強可讀性(可選)

七、結語

本三層結構規范可適配于:

  • 高并發、高一致性交易系統(如訂單、支付)

  • 多人協作、多階段開發流程

  • 數據中臺及多租戶服務架構

通過主業務抽象化、事務封裝化、功能原子化,提高可維護性、可測試性和系統穩定性。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/80275.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/80275.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/80275.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

接上篇,解決FramePack啟動報錯:“httpx.ReadError: [WinError 10054] 遠程主機強迫關閉了一個現有的連接。“的問題

#工作記錄 FramePack部署&#xff08;從PyCharm解釋器創建和使用開始&#xff09;保姆級教程-CSDN博客 上篇我們記錄到FramePack從克隆到啟動調試的保姆級教程&#xff0c;關于啟動時會報以下錯誤的問題&#xff0c;已作出解決&#xff1a; 報錯摘錄&#xff1a; (.venv) PS F…

ping_test_parallel.sh 并行網絡掃描腳本

并行網絡掃描腳本分析&#xff1a;提高網絡探測效率 引言腳本概述核心代碼分析顏色定義與初始化并行處理機制并行執行與進程控制結果處理與統計 技術亮點性能分析結論附錄&#xff1a;完整腳本 引言 在網絡管理和運維過程中&#xff0c;快速檢測網段內主機的在線狀態是一項常見…

leetcode 3342. 到達最后一個房間的最少時間 II 中等

有一個地窖&#xff0c;地窖中有 n x m 個房間&#xff0c;它們呈網格狀排布。 給你一個大小為 n x m 的二維數組 moveTime &#xff0c;其中 moveTime[i][j] 表示在這個時刻 以后 你才可以 開始 往這個房間 移動 。你在時刻 t 0 時從房間 (0, 0) 出發&#xff0c;每次可以移…

關于vue-office在vue3工程中的引用報錯問題

在vue3項目工程中&#xff0c;根據vue-office文檔在vue2中的引用&#xff1a; //引入VueOfficeDocx組件 相關樣式import VueOfficeDocx from vue-office/docx;import vue-office/docx/lib/index.css; 報錯信息&#xff1a; [plugin:vite:import-analysis] Failed to resolve …

【macOS常用快捷鍵】

以下是 macOS 最常用快捷鍵列表&#xff0c;按使用頻率由高到低分類整理&#xff0c;涵蓋日常操作、效率工具及系統控制&#xff0c;助你快速提升使用效率&#xff1a; 一、基礎高頻操作 快捷鍵功能說明Command C復制選中內容Command V粘貼Command X剪切Command Z撤銷上一…

mdadm 報錯: buffer overflow detected

最近跑 blktest (https://github.com/osandov/blktests) 時發現 md/001 的測試失敗了 單獨執行&#xff0c;最后定位到是 mdadm 命令報錯: buffer overflow detected 這個 bug 目前已經修復: https://git.kernel.org/pub/scm/utils/mdadm/mdadm.git/commit/?id827e1870f3205…

查看jdk是否安裝并且配置成功?(Android studio安裝前的準備)

WinR輸入cmd打開命令提示窗口 輸入命令 java -version 回車顯示如下&#xff1a;

STM32智能刷卡消費系統(uC/OS-III)

一、項目概述與開發背景 本系統是一款基于STM32微控制器的智能刷卡消費終端&#xff0c;集成RFID識別、OLED顯示、Flash存儲、藍牙通信等核心模塊。項目采用uC/OS-III實時操作系統實現多任務并發處理&#xff0c;適用于校園一卡通、企業食堂等小額支付場景。系統支持定額扣款、…

[人機交互]以用戶為中心的交互設計

一.以用戶為中心設計的兩個特征 ? 理解和指定產品的使用上下文 &#xff0c;并用于指導設計 ? 用戶參與式開發 ? 參與 評估研究 &#xff08;第十 — 十四章&#xff09; ? 參與 設計過程 &#xff1a;用戶作為合作設計人員 二.用戶參與設計的重要性 ? 需求的獲取主要來源…

Abaqus學習筆記

目錄 Abaqus介紹 學習資源 ?編輯Abaqus/CAE abaqus下載安裝 abaqus基本操作 Abaqus啟動 新建模型 ?編輯 ?編輯修改界面背景 ?編輯?編輯結果信息的顯示與否 ?編輯計算結果信息字體設置 ?編輯允許多繪圖狀態 單位量綱 視圖操作 事前說明 ODB文件 本構關系…

論壇系統開發(0-1) (上 前置知識介紹)

前置知識 1. 軟件的生命周期 生命周期: 對事物進行定義(描述) -> 創建 -> 使用 -> 銷毀的過程 軟件?命周期中以劃分為可?性研究、需求分析、概要設計、詳細設計、實現、組裝(集成)測試、確認測試、使?、維護、退役10個階段&#xff0c;如下圖&#xff1a; a. 可…

架構師面試(三十七):監控系統架構模式

題目 監控是在產品生命周期的運維環節&#xff0c;能對產品的關鍵指標數據進行【實時跟蹤】并對異常數據進行【實時報警】。 一句話描述&#xff0c;監控系統可以幫我們【主動預防和發現】業務系統中的問題。 我們常說&#xff0c;監控系統是 “糧草”&#xff0c;業務系統是…

【面試 · 二】JS個別重點整理

目錄 數組方法 字符串方法 遍歷 es6 構造函數及原型 原型鏈 this指向 修改 vue事件循環Event Loop FormData 數組方法 改變原數組&#xff1a;push、pop、shift、unshift、sort、splice、reverse不改變原屬組&#xff1a;concat、join、map、forEach、filter、slice …

深度學習里程碑:AlexNet 架構解析與核心技術詳解

內容摘要 本文深度解析2012年ILSVRC冠軍模型AlexNet&#xff0c;全面闡述其在深度學習發展中的關鍵突破。從模型架構出發&#xff0c;詳細解析卷積層、池化層、全連接層的數學原理&#xff0c;重點分析ReLU激活函數、LRN局部歸一化、重疊池化等創新技術的數學表達與工程價值。…

第5章 深度學習和卷積神經網絡

深度學習是人工智能的一種實現方法。本章我們將考察作為深度學習的代表的卷積神經網絡的數學結構。 5-1小惡魔來講解卷積神經網絡的結構 深度學習是重疊了很多層的隱藏層&#xff08;中間層&#xff09;的神經網絡。這樣的神經網絡使隱藏層具有一定的結構&#xff0c;從而更加…

JVM——JVM是怎么實現invokedynamic的?

JVM是怎么實現invokedynamic的&#xff1f; 在Java 7引入invokedynamic之前&#xff0c;Java虛擬機&#xff08;JVM&#xff09;在方法調用方面相對較為“僵化”。傳統的Java方法調用主要依賴于invokestatic、invokespecial、invokevirtual和invokeinterface這四條指令&#x…

STM32教程:ADC原理及程序(基于STM32F103C8T6最小系統板標準庫開發)*詳細教程*

前言: 本文章介紹了STM32微控制器的ADC外設,介紹了ADC的底層原理以及基本結構,介紹了ADC有關的標準庫函數,以及如何編寫代碼實現ADC對電位器電壓的讀取。 可以根據基本結構圖來編寫代碼 大體流程: 1、開啟RCC時鐘(包括ADC和GPIO的時鐘,另外ADCCLK的分頻器,也需要配置…

2025年APP安全攻防指南:抵御DDoS與CC攻擊的實戰策略

2025年&#xff0c;隨著AI技術與物聯網設備的深度滲透&#xff0c;DDoS與CC攻擊的復雜性和破壞性顯著升級。攻擊者通過偽造用戶行為、劫持智能設備、利用協議漏洞等手段&#xff0c;對APP發起精準打擊&#xff0c;導致服務癱瘓、用戶流失甚至數據泄露。面對這一挑戰&#xff0c…

STM32的定時器

定時器的介紹 介紹&#xff1a;STM32F103C8T6微控制器內部集成了多種類型的定時器&#xff0c;這些定時器在嵌入式系統中扮演著重要角色&#xff0c;用于計時、延時、事件觸發以及PWM波形生成、脈沖捕獲等應用。 *幾種定時器&#xff08;STM32F103系列&#xff09;&#xff1…

算法中的數學:約數

1.求一個整數的所有約數 對于一個整數x&#xff0c;他的其中一個約數若為i&#xff0c;那么x/i也是x的一個約數。而其中一個約數的大小一定小于等于根號x&#xff08;完全平方數則兩個約數都為根號x&#xff09;&#xff0c;所以我們只需要遍歷到根號x&#xff0c;然后計算出另…