在本文中,此樣本標準藍圖的預存程序命名方法只適用於SQL內部,假如你正在建立一個新的預存程序,或是發現一個沒有按照這個標準構造的預存程序,即可以參考使用這個標準。
注釋:假如預存程序以sp_ 為首碼開始命名那麼會啟動並執行稍微的緩慢,這是因為SQL Server將首先尋找系統預存程序,所以我們決不推薦使用sp_作為首碼。
預存程序的命名有這個的文法:
[proc] [MainTableName] By [FieldName(optional)] [Action]
[ 1 ] [ 2 ] [ 3 ] [ 4 ] |
(1) 所有的預存程序必須有首碼'proc'. 所有的系統預存程序都有首碼"sp_", 推薦不使用這樣的首碼因為會稍微的減慢。
(2) 表名就是預存程序訪問的對象。
(3) 可選欄位名就是條件子句。 例如:
procClientByCoNameSelect, procClientByClientIDSelect |
(4) 最後的行為動詞就是預存程序要執行的任務。
如果預存程序返回一條記錄那麼尾碼是:Select
如果預存程序插入資料那麼尾碼是:Insert
如果預存程序更新資料那麼尾碼是:Update
如果預存程序有插入和更新那麼尾碼是:Save
如果預存程序刪除資料那麼尾碼是:Delete
如果預存程序更新表中的資料 (ie. drop and create) 那麼尾碼是:Create
如果預存程序返回輸出參數或0,那麼尾碼是:Output
例子:
一個僅僅返回一個輸出參數的預存程序:
ALTER PROCEDURE procClientRateOutput @pstrClientID VARCHAR(6) = 'CABLE', @pstrCategoryID VARCHAR(6) = '<All>', @pstrEmpID VARCHAR(6)='AC', @pdteDate datetime = '1996/1/1', @curRate MONEY OUTPUT
AS
-- Description: Get the $Rate for this client and this employee -- and this category from Table ClientRate
SET @curRate = ( SELECT TOP 1 Rate FROM ClientRate WHERE ClientID=@pstrClientID AND EmpID=@pstrEmpID AND CategoryID=@pstrCategoryID AND DateEnd > @pdteDate ORDER BY DateEnd )
IF @curRate IS NULL
SET @curRate = ( SELECT TOP 1 Rate FROM ClientRate WHERE ClientID=@pstrClientID AND EmpID=@pstrEmpID AND CategoryID='<ALL>' AND DateEnd > @pdteDate ORDER BY DateEnd )
RETURN |
從前的寫法:
Select 'procGetRate' or 'sp_GetRate' Insert 'procEmailMergeAdd' |
目前的寫法:
'procClientRateSelect' 'procEmailMergeInsert' |