SQL SERVER存儲過程

什么是存儲過程

SQL 存儲過程(Stored Procedure)是一個在數據庫中預編譯并存儲的一組 SQL 語句。它們可以包含查詢、插入、更新、刪除等數據庫操作,甚至包括控制流語句(如條件判斷、循環等)。存儲過程可以通過調用來執行,而不需要每次都重新編寫和執行 SQL 語句。

分類

  1. 系統存儲過程
    是再master數據庫中,其他數據庫可以直接使用系統存儲過程
    再新的數據庫中會自動創建
    調用時,不需要加數據庫名稱

  2. 自定義存儲過程
    開發者自己創建的
    可以傳參 也可以有返回值
    怎么標明存儲過程是否執行成功
    print 日志 查看日志即可
    存儲過程內部可以寫什么?
    一個或者多個操作
    存儲過程與表之間的關系是什么?
    存儲過程依賴表的存在,如果存儲中依賴的表刪除了,那么存儲過程也就失效了
    關系:操作與被操作的關系
    執行:exec/execute 存儲過程名參數列表(多個參數,用逗號分割)
    存儲過程的優缺點是什么?
    優點:提高了程序的可復用性,減少腳本冗余
    提高了管理數據庫的效率
    提高了執行sql的熟讀
    減輕了服務器的負擔
    缺點:需要專門維護,占用數據庫空間,

存儲過程的優點:

性能提升:

存儲過程是在數據庫中編譯并優化過的,因此執行時可以比單獨的 SQL 查詢更高效。因為在執行時,SQL
語句已經預編譯,避免了重復解析和優化的開銷。

重用性:

存儲過程是可重用的,可以通過調用存儲過程多次執行相同的操作,而無需重復編寫相同的 SQL 語句。

封裝性:

存儲過程將數據庫邏輯封裝起來,使得應用程序與數據庫操作解耦,減少了應用程序和數據庫之間的依賴。

安全性:

通過限制應用程序對數據庫表的直接訪問,存儲過程可以提供更好的安全性。用戶只需要權限調用存儲過程,而無需直接訪問底層數據表。

事務管理:

存儲過程支持事務管理,可以確保一組操作要么全部成功,要么全部失敗(原子性)。這使得數據的一致性得到了保障。

定義存儲過程 名稱:建議以為 Proc開頭

create proc Proc_gen_orderNo
as 
begin -- {
-- 這里編寫執行邏輯
print '開始執行...'
select * from BookInfos
select * from BookShellInfos
print '存儲過程執行完畢'
end --}
---- bug: 如果 存儲過程已經存在,執行新建報錯觸發存儲過程
exec Proc_gen_orderNo

練習:

完成自動生成訂單編號的邏輯:
訂單編號:2025062600001 202506260002 202506260003
前8位:插入數據的日期
后5位:訂單編號的流水號碼

思考問題:

如果獲取當前時間編號?

select convert(varchar(255),getDate(),112) -- 20250626

如何查詢最后一條記錄的編號?
方式一:

declare @lastNo varchar(255) 
select  @lastNo=orderNo from orderTable

問題:數據只有幾百條,沒有影響,
假如每天都產生上萬個訂單,如果查全部,查詢的時間,一天比一天慢
優化:查詢今天的數據,倒序排序,在查第一條,== 今天最后一個點單
方式二:

select top 1 @lastNo=orderNo from orderTable where substring(orderNo,1,8) = @ starTimespan
order by orderId desc;

如何生成新的編號
新編號

 set @No = @starTimespan + '00001'

編號已經存在,怎么驗證編號已經存在,如何再已存在編號基礎上進行生成

create proc Proc_gen_orderNo 
as 
begin-- 1:聲明完成整個過程需要的變量declare @No  varchar(255)   -- 執行后,生成的編號declare @starTimespan  varchar(255) -- 當前時間,時間編號declare @lastNo varchar(255)  -- 最后一條記錄的訂單編號-- 2:給變量初始化賦值set @starTimespan = convert(varchar(255),getDate(),112) -- 時間編號-- 找到最后一條記錄的編號select top 1 @lastNo=orderNo from orderTablewhere substring(orderNo,1,8) = @starTimespan order by orderId desc -- 3:生成新的編號-- 3.1 如果最后一條記錄不存在if @lastNo is nullbeginset @No = @starTimespan + '00001'insert into orderTable(orderNo) values(@No)print '第一個訂單已產生' endelse  begin -- 存在最后一條記錄print '今天已經有了訂單'declare @lastNo_ int  -- 當前生成記錄的尾號declare @tmpNo varchar(255)  -- 編號尾號字符串類型declare @tmpLen int;  -- 字符尾號的長度declare @n int -- 循環次數set @n = 0;  --設置循環次初始值print  substring(@lastNo,9,5)-- 求當前訂單,流水的序號set @lastNo_ = convert(int, substring(@lastNo,9,5)) +1 print @lastNo_-- 將流水序號,轉化為字符串類型set @tmpNo = convert(varchar(10),@lastNo_)-- 當前字符流水的長度。set @tmpLen = len(@tmpNo)print @tmpLen-- 求流水號前面拼接幾個0,流水號總長度為5.while(@n<5-@tmpLen)beginSET @tmpNo = '0' + @tmpNoset @n +=1end-- 生成新的編號set @No = @starTimespan + @tmpNoprint @No-- 插入數據insert into orderTable(orderNo) values(@No)endend
-- 1:執行新建 存儲過程
-- 2:觸發存儲過程。exec Proc_gen_orderNo

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

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

相關文章

Lombok注解 - 提高Java開發效率

01 繁瑣編碼 初入 Java 開發領域時&#xff0c;編寫實體類的瑣碎經歷想必各位都深有感觸。 每當創建一個實體類&#xff0c;鋪天蓋地的 getter、setter、toString 方法接踵而至&#xff0c;手指在鍵盤上頻繁敲擊&#xff0c;酸痛不已。 而 Lombok 這一神器的出現&#xff0c…

Linux修改uboot啟動延時方法詳細攻略,觸覺智能RK3568開發板演示

修改uboot延時 首先查找defconfig文件 ./build.sh uboot #通過編譯日志查看使用的defconfig文件ls u-boot/configs/*3568* #在SDK根目錄下執行該操作 如圖標注處就是所使用的u-boot配置文件。 然后修改延時數&#xff1a; vim u-boot/configs/rk3568_defconfig 將CONFIG_BOO…

dockers virbox 安裝

sudo apt remove docker docker-engine docker.io containerd runc 更新包索引并安裝依賴 sudo apt update sudo apt install ca-certificates curl gnupg 添加Docker官方GPG密鑰 sudo install -m 0755 -d /etc/apt/keyrings curl -fsSL https://download.docker.com/linux…

Restormer: Efficient Transformer for High-Resolution Image Restoration 論文閱讀

題目 (Title): Restormer&#xff1a;用于高分辨率圖像恢復的高效Transformer 摘要 (Abstract): 由于卷積神經網絡&#xff08;CNN&#xff09;在從大規模數據中學習可泛化的圖像先驗方面表現出色&#xff0c;這些模型已被廣泛應用于圖像恢復及相關任務。最近&#xff0c;另一…

音視頻開發協議棧全景解析

音視頻開發協議棧全景解析 引言&#xff1a;協議棧的重要性與演進 在當今數字化時代&#xff0c;音視頻技術已成為互聯網基礎設施的核心組成部分。從視頻會議、直播到智能安防、元宇宙應用&#xff0c;音視頻協議棧的設計直接影響著用戶體驗質量(QoE)。作為開發者&#xff0c…

Java面試題025:一文深入了解數據庫Redis(1)

歡迎大家關注我的JAVA面試題專欄,該專欄會持續更新,從原理角度覆蓋Java知識體系的方方面面。 一文吃透JAVA知識體系(面試題)https://bl

Python:調用json.dumps處理datetime對象數據

文章目錄 前言一、查詢SQL語句中數據轉換1、思路2、示例3、常用格式化模式4、注意事項 二、自定義JSONEncoder處理1、思路2、示例3、使用方法 寫在結尾 前言 使用Python開發查詢PostgreSQL數據庫&#xff0c;返回數據中有timestamp類型數據字段。如果使用json.dumps轉換成json對…

QT6 源(130)視圖模型架構中的字符串列表模型 QStringListModel:成員函數,本類的繼承關系圖以及源碼注釋

&#xff08;1&#xff09;字符串列表型的 model &#xff0c;可以交給視圖 view 來顯示&#xff0c;也可以由組合框 comboBox 讀取其中的內容 &#xff1a; &#xff08;2&#xff09;以下開始學習本字符串 model 里的成員函數&#xff0c;本類沒有再定義信號與槽函數 &#x…

dockerfile命令及構建+docker-compose安裝構建

一&#xff0c;dockerfile常用命令 命令介紹FROM–指定基礎鏡像LABEL作者信息USER切換運行屬主身份WORKDUR切換工作目錄ENV用于docker容器設置環境變量RUN用來執行命令行的命令COPY把宿主機文件復制到鏡像中去ADD將文件路徑復制添加到容器內部路徑EXPOSE為容器打開指定要監聽的…

數學:逆元,同余

逆元&#xff0c;同余 0.引言1.同余1.1 同余的基本性質1.2 解同余線性方程 2.逆元費馬小定理求逆元(m必需為質數&#xff09;擴展歐幾里得求逆元&#xff08;使用任意互質的a和m&#xff09; 0.引言 本文講述什么是逆元&#xff0c;如何求逆元。求逆元的兩種常規方法。然后知道…

廣州華銳互動:技術與創意雙驅動的 VR 先鋒?

廣州華銳互動能夠在眾多 VR 公司中嶄露頭角&#xff0c;離不開其強大的技術實力和源源不斷的創意靈感 。在技術研發方面&#xff0c;廣州華銳互動組建了一支專業的技術團隊&#xff0c;團隊成員均具備扎實的技術功底和豐富的行業經驗&#xff0c;他們專注于 VR、AR、3D 等核心技…

教育培訓教學通用PPT模版

教育培訓通用PPT模版&#xff0c;兒童教育PPT模版&#xff0c;公開課件教學PPT模版&#xff0c;讀書筆記PPT模版&#xff0c;古風PPT模版&#xff0c;教育教學通用PPT模版 教育培訓教學通用PPT模版&#xff1a;https://pan.quark.cn/s/6c2ed020e398

Data Vault 初探(五) —— 定期裝載_SQL

說明&#xff1a; 1. 定期裝載的周期為每天一次。 2. 每天裝載自上次裝載后的變化數據 3. 建立源數據庫的過渡表用于CDC 4. 建立cdc_time表用于基于時間戳的CDC 5. 因為源庫上只有訂單銷售表有時間屬性&#xff0c;所以除了sales_order和sales_order_item拉取變化數據外&#x…

Java虛擬機棧(JVM Stack)詳解與工作流程分析

Java虛擬機棧&#xff08;JVM Stack&#xff09;詳解與工作流程分析 1. 虛擬機棧核心概念 基本特性 線程私有&#xff1a;每個線程在創建時都會分配一個獨立的棧存儲內容&#xff1a; 棧幀&#xff08;Stack Frame&#xff09;&#xff1a;每個方法調用對應一個棧幀 生命周期…

Sonarqube:Jenkins觸發sonar掃描出現UnsupportedClassVersionError錯誤處理

文章目錄 1、問題現象2、問題根因3、解決思路3.1 解決思路13.2 解決思路23.3 解決思路3 1、問題現象 問題現象&#xff1a;在每次Jenkins觸發sonar掃描時&#xff0c;Sonar-scanner掃描器執行都會出現UnsupportedClassVersionError異常&#xff0c;如下&#xff1a; ERROR: …

Spark SQL to_json 函數介紹

目錄 前言函數介紹參數說明示例 前言 在Apache Hive中&#xff0c;并沒有內置的to_json函數。在Apache Spark SQL中確實有to_json函數,它可以用來將結構化數據&#xff08;如結構化類型或MAP類型&#xff09;轉換為JSON字符串。這個功能對于需要將表格數據輸出為JSON格式的場景…

《解鎖前端潛力:自動化流程搭建秘籍》

當項目逐漸從萌芽走向繁茂&#xff0c;中期階段對流程優化與效率提升的需求便愈發迫切。搭建一套自動化測試、持續集成與部署的完整流程&#xff0c;已然成為突破瓶頸、保障代碼質量與上線效率的關鍵密鑰。這不僅是技術的進階&#xff0c;更是思維與協作模式的革新。在踏上構建…

計算機體系結構中的片上系統SoC是什么?

計算機體系結構中的片上系統SoC是什么&#xff1f; 片上系統&#xff08;SoC&#xff0c;System on Chip&#xff09; 是一種將計算機或其他電子系統的多個關鍵組件集成到單一芯片上的集成電路設計。它不僅僅是處理器&#xff08;CPU&#xff09;&#xff0c;而是將處理器、內…

linux虛擬機基礎-磁盤擴容詳細版本模擬實驗

擴容實驗參考上一篇博客&#xff1a; https://blog.csdn.net/wenxiaocsdn/article/details/141932877?spm1001.2014.3001.5502 LVM基礎知識附錄紅帽官方文檔 配置和管理邏輯卷 | Red Hat Enterprise Linux | 8 | Red Hat Documentation LVM邏輯結構圖 LVM 管理命令速查表&…

hbase高可用部署

要實現HBase集群的高可用部署&#xff08;High Availability, HA&#xff09;&#xff0c;核心在于消除單點故障&#xff08;特別是HMaster節點&#xff09;&#xff0c;并確保數據冗余和服務自動恢復。以下是、關鍵步驟和配置要點&#xff1a; 一、核心配置步驟? ?1.1 啟用…