Sql Server系列:預存程序

來源:互聯網
上載者:User

標籤:style   blog   ar   io   color   使用   sp   for   strong   

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_GetAllProductsAS    SELECT [ProductID],[ProductName],[UnitPrice],[UnitsInStock],[CreateDate]    FROM [dbo].[Product]
EXECUTE USP_GetAllProducts

  帶輸入參數的預存程序:

CREATE PROCEDURE USP_GetByProductID(    @ProductID INT)AS    SELECT [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)AS    SELECT @TotalRecords = COUNT(1)    FROM [dbo].[Product]    WHERE [CategoryID] = @CategoryID
DECLARE @TotalProducts INTEXECUTE USP_GetTotalRecordsByCategoryID @CategoryID = 1, @TotalRecords = @TotalProducts OUTPUTSELECT @TotalProducts
DECLARE @TotalProducts INTEXECUTE USP_GetTotalRecordsByCategoryID 1, @TotalProducts OUTPUTSELECT @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

Sql Server系列:預存程序

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.