2021年9月23日 星期四

[SQL Server] 預存程式(PROCEDURE),新增及修改

減少伺服器/用戶端網路流量

程序中的指令會以單一批次的程式碼來執行。 這可以大幅降低伺服器與用戶端之間的網路流量,因為網路之間只會傳送執行程序的呼叫。 若程序沒有提供程式碼封裝,則每個個別的程式碼行都會在網路上傳送。


更強的安全性

多個使用者和用戶端程式都可以透過程序,在基礎資料庫物件上執行作業,即使使用者和程式不具備這些基礎物件的直接權限亦可。 程序也會控制要執行哪些程序和活動,並保護基礎資料庫物件。 這可避免在個別物件層級授與權限的需求,而簡化安全層。


重複使用程式碼

任何重複資料庫作業的程式碼,都是程序中非常適合封裝的項目。 這可避免重複撰寫相同程式碼、減少程式碼不一致,並且可讓具備所需權限的任何使用者或應用程式存取及執行程式碼。


維護更簡易

當用戶端應用程式呼叫程序並將資料庫作業保留在資料層中時,若基礎資料庫中有任何變更,只有程序必須更新。 應用程式層會維持獨立,也不需要知道資料庫配置、關聯性或程序間有什麼變更。


提升效能

依預設,第一次編譯程序時,將執行並建立執行計畫,以利後續的執行中重複使用。 由於查詢處理器不需要建立新計畫,通常可以花較少的時間來處理程序。


以下程式碼範例:

USE [Company] --使用哪張資料表

GO

CREATE/ALTER PROCEDURE [USER](@NAME VARCHAR(5))--CREATE為新增,ALTER為修改[]為預存程式的名稱,()為參數,須從外部帶入參數時才需要。

AS

DECLARE @AGE VARCHAR(3)--變數的宣告

IF @AGE = 20--使用IF,如果IF後需要做的指令超過一個需用BEGIN包住

    BEGIN

        SET NOCOUNT ON--小技巧,加入這行指令的用處是可讓SELECT、INSERT等等指令後不回傳資料到使用端以節省數據量

        SELECT * FROM TS_USER--資料處裡區段,在這裡查詢、處理資料

    END

沒有留言:

張貼留言