日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Sql Server系列:存储过程

發布時間:2023/12/31 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Sql Server系列:存储过程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1 存儲過程簡介

  存儲過程是使用T-SQL代碼編寫的代碼段。在存儲過程中,可以聲明變量、執行條件判斷語句等其他編程功能。在MS SQL Server 2012中存儲過程主要分三類:系統存儲過程、自定義存儲過程和擴展存儲過程。

  存儲過程的優點:

  ? 存儲過程加快系統允許速度,存儲過程只在創建時編譯,以后每次執行時不需要重新編譯。

  ? 存儲過程可以封裝復雜的數據庫操作,簡化操作流程。

  ? 可實現模塊化的程序設計,存儲過程可以多次調用,提供統一的數據庫訪問接口,改進應用程序的可維護性。

  ? 存儲過程可以增強代碼的安全性。

  ? 存儲過程可以降低網絡流量,存儲過程代碼直接存儲在數據庫中,在客戶端與服務器的通訊過程中,不會產生大量的T-SQL代碼流量。

  存儲過程的缺點:

  ? 數據庫移植不方便,存儲過程依賴于數據庫管理系統,MS SQL Server 2012存儲過程中封裝的操作代碼不能直接移植到其他數據庫系統中。

  ? 不支持面向對象的設計,無法采用面向對象的方式將邏輯業務進行封裝。

  ? 不易維護

  ? 不支持集群

1.1 系統存儲過程

  系統存儲過程是有MS SQL Server 2012系統自身提供的存儲過程,可以作為命令執行各種操作。系統存儲過程主要用來從系統表中獲取信息,使用系統存儲過程完成數據庫服務器的管理工作。系統存儲過程位于數據庫服務器中,并以sp_開頭,系統存儲過程定義在系統定義和用戶定義的數據庫中,在調用時不必在存儲過程前加數據庫限定名。

  系統存儲過程創建并存儲于系統數據庫master中。

1.2 自定義存儲過程

  自定義存儲過程即用戶使用T-SQL語句編寫的、為了實現某一特定業務需求,在用戶數據庫中編寫的T-SQL語句集合,用戶存儲過程可以接受輸入參數、向客戶端返回結果和信息、返回輸出參數等。

  創建自定義存儲過程時,存儲過程名前面加上##表示創建一個全局的臨時存儲過程;存儲過程名前面加上#表示創建局部臨時存儲過程。局部臨時存儲過程只能在創建它的會話中使用,會話結束時,將被刪除。這兩種存儲過程都存儲在tempdb數據庫中。

1.3 擴展存儲過程

  擴展存儲過程是以在SQL Server 2012環境外執行的DLL來實現的。擴展存儲過程以前綴xp_標識。

2 創建及執行存儲過程

  CREATE PROCEDURE語句的語法格式:

CREATE { PROC | PROCEDURE } [schema_name.] procedure_name [ ; number ] [ { @parameter [ type_schema_name. ] data_type }[ VARYING ] [ = default ] [ OUT | OUTPUT | [READONLY]] [ ,...n ] [ WITH <procedure_option> [ ,...n ] ] [ FOR REPLICATION ] AS { [ BEGIN ] sql_statement [;] [ ...n ] [ END ] } [;]

  EXECUTE存儲過程的語法格式:

[ { EXEC | EXECUTE } ]{ [ @return_status = ]{ module_name [ ;number ] | @module_name_var } [ [ @parameter = ] { value | @variable [ OUTPUT ] | [ DEFAULT ] }][ ,...n ][ WITH <execute_option> [ ,...n ] ]} [;]

  示例:

CREATE PROCEDURE USP_GetAllProducts ASSELECT [ProductID],[ProductName],[UnitPrice],[UnitsInStock],[CreateDate]FROM [dbo].[Product] EXECUTE USP_GetAllProducts

  帶輸入參數的存儲過程:

CREATE PROCEDURE USP_GetByProductID (@ProductID INT ) ASSELECT [ProductID],[ProductName],[UnitPrice],[UnitsInStock],[CreateDate]FROM [dbo].[Product]WHERE [ProductID] = @ProductID EXECUTE USP_GetByProductID @ProductID = 1

  帶輸出參數的存儲過程:

CREATE PROCEDURE USP_GetTotalRecordsByCategoryID (@CategoryID INT,@TotalRecords INT OUTPUT ) ASSELECT @TotalRecords = COUNT(1) FROM [dbo].[Product]WHERE [CategoryID] = @CategoryID DECLARE @TotalProducts INT EXECUTE USP_GetTotalRecordsByCategoryID @CategoryID = 1, @TotalRecords = @TotalProducts OUTPUT SELECT @TotalProducts DECLARE @TotalProducts INT EXECUTE USP_GetTotalRecordsByCategoryID 1, @TotalProducts OUTPUT SELECT @TotalProducts

3 修改存儲過程

  修改存儲過程語法格式:

ALTER { PROC | PROCEDURE } [schema_name.] procedure_name [ ; number ] [ { @parameter [ type_schema_name. ] data_type } [ VARYING ] [ = default ] [ OUT | OUTPUT ] [READONLY]] [ ,...n ] [ WITH <procedure_option> [ ,...n ] ] [ FOR REPLICATION ] AS { [ BEGIN ] sql_statement [;] [ ...n ] [ END ] } [;]

4 查看存儲過程

  查看存儲過程結構:

EXEC sp_help USP_GetTotalRecordsByCategoryID

  查看存儲過程文本:

EXEC sp_helptext USP_GetTotalRecordsByCategoryID

5 刪除存儲過程

  刪除存儲過程語法:

DROP { PROC | PROCEDURE } { [ schema_name. ] procedure } [ ,...n ]

  示例:

DROP PROCEDURE USP_GetTotalRecordsByCategoryID

6 使用WITH RECOMPILE選項

  使用WITH RECOMPILE選項可以確保為特定的某次運行創建新的計劃,使用該選項的兩種方式:

  ? 在運行時包含WITH RECOMPILE

EXECUTE USP_GetAllProducts WITH RECOMPILE

  ? 在存儲過程中包含WITH RECOMPILE選項。

  在CREATE PROC或ALTER PROC語句中的AS語句前添加WITH RECOMPILE選項。

7 遞歸存儲過程

  SQL Server最多可以進行32次遞歸,超出則會引發錯誤并停止處理。

CREATE PROC USP_Factorial (@ValueIn INT,@ValueOut INT OUTPUT ) ASDECLARE @InWorking INTDECLARE @OutWorking INTIF @ValueIn >= 1BEGINSELECT @InWorking = @ValueIn - 1EXEC USP_Factorial @InWorking, @OutWorking OUTPUTSELECT @ValueOut = @ValueIn * @OutWorkingENDELSESET @ValueOut = 1 DECLARE @ValueOut INT EXEC USP_Factorial 5, @ValueOut OUTPUT SELECT @ValueOut

轉載于:https://www.cnblogs.com/libingql/p/4166666.html

總結

以上是生活随笔為你收集整理的Sql Server系列:存储过程的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。