---------------------------------------------------------------
我使用的規則:
1。資料庫:按實際用途取名,沒有標準;
2。表:t_開頭,加上英文名或縮寫;
3。欄位:具有一定意義的英文縮寫;
4。視圖:v_開頭,加上英文名或縮寫;
5。預存程序:p_開頭,加上英文名或縮寫;
僅供參考。
---------------------------------------------------------------
2 命名規則
2.1 表名
XXX相關表以r_作為首碼,YYY相關表以t_作為首碼。如r_acc 、t_bcc。
後台表名盡量與前台表名相同,後台專屬的表應以_b作為尾碼。如r_gggd_b。
命名應盡量反映儲存的資料內容。
2.2 視圖名
視圖以v_作為首碼。由於前台無視圖,故不需加_b。
命名應盡量體現各視圖的功能。
2.3 觸發器名
觸發器名為相應的表名加上尾碼,Insert觸發器加'_i',Delete觸發器加'_d',Update觸發器加'_u',如:r_bch_i,r_bch_d,r_bch_u。
2.4 預存程序名
預存程序應以'sp_'開頭,後續部分主要以動賓形式構成,並用底線分割各個組成部分。如增加BSC機架的DRT單板的預存程序為'sp_ins_board_drt'。
2.5 變數名
變數名採用小寫,若屬於片語形式,用底線分隔每個單詞,如@my_err_no。
2.6 命名中其他注意事項
以上命名都不得超過30個字元的系統限制。
變數名的長度限制為29(不包括標識字元@)。
資料對象、變數的命名都採用英文字元。禁止使用中文命名。
3 編程結構和描述
SQL SERVER系統中,一個批處理是從客戶傳給伺服器的一個完整的包,可以包含若干條SQL語句。批處理中的語句是作為一組去進行文法分析、編譯和執行的。觸發器、預存程序等資料對象則是將批處理永久化的方法。
3.1 注釋
注釋可以包含在批處理中。在觸發器、預存程序中包含描述性注釋將大大增加文本的可讀性和可維護性。本規範建議:
1、 注釋以英文為主。
實際應用中,發現以中文注釋的SQL語句版本在英文環境中不可用。為避免後續版本執行過程中發生某些異常錯誤,建議使用英文注釋。
2、 注釋儘可能詳細、全面。
建立每一資料對象前,應具體描述該對象的功能和用途。
傳入參數的含義應該有所說明。如果取值範圍確定,也應該一併說明。取值有特定含義的變數(如boolean類型變數),應給出每個值的含義。
3、 注釋文法包含兩種情況:單行注釋、多行注釋
單行注釋:注釋前有兩個連字號(--),最後以行尾序列(CR-LF)結束。一般,對變數、條件子句可以採用該類注釋。
多行注釋:符號/*和*/之間的內容為注釋內容。對某項完整的操作建議使用該類注釋。
4、 注釋簡潔,同時應描述清晰。
3.2 函數注釋:
編寫函數文本--如觸發器、預存程序以及其他資料對象--時,必須為每個函數增加適當注釋。該注釋以多行注釋為主,主要結構如下:
/************************************************************************
*name : --函數名
*function : --函數功能
*input : --輸入參數
*output : --輸出參數
*author : --作者
*CreateDate : --建立時間
*UpdateDate : --函數更改資訊(包括作者、時間、更改內容等)
*************************************************************************/
CREATE PROCEDURE sp_xxx
…
3.3 條件執行語句if…else
條件陳述式塊(statenemt block,以 begin…end為邊界)僅在if子句的條件為真時才被執行。為提高代碼的可讀性,建議嵌套不多於5層。還有,當嵌套層次太多時,應該考慮是否可以使用case語句。
3.4 重複執行while和跳躍陳述式goto
需要多次執行的語句,可以使用while結構。其中,控制while迴圈的條件在任何處理開始之前需要先執行一次。迴圈體中的保留字break無條件的退出while迴圈,然後繼續處理後續語句;保留字continue重新計算while條件,如果條件為真,則從迴圈開始處重新執行各語句。
使用跳躍陳述式goto和標籤label也可以方便地實現迴圈和其他更靈活的操作。SQL SERVER僅具有單通道文法分析器,因此不能解析對尚未建立的對象所做的前向參考。換言之,跳轉到某標籤的後續語句應該是可執行檔(如不存在可能尚未建立的資料對象)。
3.5 書寫格式
資料庫伺服器端的觸發器和預存程序是一類特殊的文本,為方便開發和維護,提高代碼的易讀性和可維護性。規範建議按照分級縮排格式編寫該文本。
順序執行的各命令位於同一級;條件陳述式塊(statenemt block,以 begin…end為邊界)位於下一級,類推。
SQL語句是該文本的主體。為適應某些教複雜的使用者需求,SQL語句可能比較龐大。為方便閱讀和維護,規範建議按照SQL語句中系統保留字的關鍵程度再劃分為三級。具體分級請參照下表。其中,非系統保留字(如欄位名、資料表名、標點符號)相對本級保留字再縮排一級。多個連續的非保留字可以分行書寫,也可以寫在同一行。當WHERE包含的條件子句教複雜時,應該每行唯寫一個條件分句,並為重要的條件字句填寫單行注釋。
在保證基本縮排格式的前提下,可以通過對齊某些重要關鍵字(如條件關鍵字AND、OR,符號 = 、 <> 等)來進一步提高文本的易讀性和可維護性。
相鄰兩級的縮排量為10個空格。這也是ISQL編輯器預設的文本縮排量。另外,在ISQL編輯器中,一個TAB鍵也相當於10個空格。
註:按照功能,四類SQL語句(SELECT、INSERT、UPDATE、DELETE)的關鍵字可以劃分為三類:主關鍵字、次關鍵字、一般關鍵字。如下表所示:
主關鍵字 次關鍵字 一般關鍵字
SELECTINSERT (INTO)UPDATEDELETE FROMWHEREVALUESINSERT…SELECT…FROM語句中的SELECT和FROM ANDORBETWEENINLIKE
3.6 字型
系統保留字應大寫,包括系統公開變數等。其他字元(如使用者自訂變數、使用者自訂資料對象名)小寫。
需要特殊強調的部分可以大寫。
一條完整備註陳述式的首字元應大寫。對某變數、某條件字句的注釋可以全部使用小寫。
通過下一節中產生表r_a的刪除觸發器的執行個體可以部分說明對象命名、注釋、基本書寫格式和字元大小寫方面的一些注意事項。
4 觸發器編程規範
4.1 範例
下面通過一個例子,說明觸發器編程中應遵守的規範:
/* delete related r_a according to deleted table */
CREATE TRIGGER r_a_d ON r_a
FOR DELETE
AS
IF @@ROWCOUNT = 0 -no rows deleted
RETURN
/* delete r_b table related to deleted table */
DELETE r_b
FROM r_b b, deleted d
WHERE b.id=d.id
IF @@ERROR != 0
BEGIN
RAISERROR("Error occurred deleting related records", 16, 1)
ROLLBACK TRAN
END
RETURN
作以下幾點說明:
1. 檢查是否有行被修改。注意:不論資料是否被修改,觸發器都會引發,執行情況取決於T-SQL語句的執行,而和任何潛在的where子句是否執行無關。
2. 因為被刪除行在該表中不再可用,所以應在被刪除的表中查看。
3. 檢查T-SQL語句的傳回碼,以捕獲任何出錯條件。
4.2 事務過程中的觸發器
1. 觸發器內的rollback將所有工作返回至最外層的begin tran,完成觸發器內的處理並異常終止當前的批處理。
2. 不可以從觸發器內部返回至某個已命名的事務過程,這將產生運行錯誤,掛起所有工作並終止批處理。
5 預存程序編程規範
5.1 帶有參數的執行
在執行預存程序時,可以通過名字來制定參數,這樣可以用任何順序傳遞參數,而且自動起到注釋的作用,因此建議編程時使用這種方法。
5.2 預設參數值
把參數的預設值定為null,這是捕獲在過