




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
MSSQL腳本編碼規范福州星網視易信息系統有限公司更新記錄:版本作者日期內容1.0黃晨東2023.09.09SQL腳本編寫規范2.0蔡炆炆2023.10.15基于1.0版本進行補充和整理?目錄TOC\o"1-3"\h\z\uHYPERLINK\l"_Toc"Transact-SQL編程規范?PAGEREF_Toc\h1HYPERLINK\l"_Toc"一、?概述?PAGEREF_Toc\h1HYPERLINK\l"_Toc"1. 基本原則?PAGEREF_Toc\h1HYPERLINK2. 基本規范?PAGEREF_Toc\h1HYPERLINK\l"_Toc"二、?對象命名 PAGEREF_Toc\h1HYPERLINK\l"_Toc"1.?數據庫 PAGEREF_Toc\h1HYPERLINK\l"_Toc"2. 數據庫文獻?PAGEREF_Toc\h14.?數據視圖 PAGEREF_Toc\h2HYPERLINK\l"_Toc"5. 數據列?PAGEREF_Toc\h2HYPERLINK\l"_Toc"6.?存儲過程 PAGEREF_Toc\h2HYPERLINK\l"_Toc"7.?函數 PAGEREF_Toc\h3HYPERLINK\l"_Toc"8.?用戶定義數據類型?PAGEREF_Toc\h3HYPERLINK\l"_Toc"9.?主鍵、索引 PAGEREF_Toc\h3HYPERLINK三、 參數命名?PAGEREF_Toc\h3HYPERLINK\l"_Toc"1.?數據列參數 PAGEREF_Toc\h3HYPERLINK\l"_Toc"2. 非數據列參數 PAGEREF_Toc\h4HYPERLINK\l"_Toc"3.?常用字段命名 PAGEREF_Toc\h4HYPERLINK四、?SQL編寫?PAGEREF_Toc\h4HYPERLINK\l"_Toc"1. 大小寫?PAGEREF_Toc\h4HYPERLINK\l"_Toc"2.?存儲格式 PAGEREF_Toc\h4HYPERLINK\l"_Toc"3. 類型選擇?PAGEREF_Toc\h4HYPERLINK4. 默認值?PAGEREF_Toc\h5HYPERLINK6. 使用“'”?PAGEREF_Toc\h5HYPERLINK\l"_Toc"7. 語句縮進?PAGEREF_Toc\h5HYPERLINK9.?語句分割?PAGEREF_Toc\h5HYPERLINK\l"_Toc"10. 使用“*” PAGEREF_Toc\h5HYPERLINK\l"_Toc"11. 表名別名 PAGEREF_Toc\h5HYPERLINK13. 數值比較?PAGEREF_Toc\h6HYPERLINK14.?排序 PAGEREF_Toc\h6HYPERLINK15.?Unicode字符串 PAGEREF_Toc\h6HYPERLINK16. BEGIN...END塊 PAGEREF_Toc\h6HYPERLINK\l"_Toc"17.?TOP子句 PAGEREF_Toc\h618.?TRANSACTION編寫 PAGEREF_Toc\h6HYPERLINK2. TRANSACTION注釋 PAGEREF_Toc\h7Transact-SQL編程規范概述本規范重要規定SQL腳本在書寫過程中所應遵循的規則及注意事項。編寫該規范的目的是使公司軟件開發人員的源代碼書寫習慣保持一致。這樣做可以使每一個成員都可以理解其它成員的代碼,以便于源代碼的二次開發記憶系統的維護。基本原則以大小寫敏感編寫SQL語句。
盡量使用Unicode數據類型。?優先使用連接代替子查詢或嵌套查詢。?盡量使用參數化SQL查詢代替語句拼接SQL查詢。?盡量使用存儲過程代替SQL語句。嚴禁使用[拼音]+[英語]的方式來命名SQL對象或變量。?嚴禁使用觸發器。?嚴禁在表間創建外鍵關系。嚴禁創建自增長主鍵列基本規范采用Pascal樣式命名數據庫對象。大寫T-SQL語言的所有關鍵字,謂詞和系統函數。Pascal大小寫:組成標記符的每個單詞的首字母大寫,其余字母小寫的書寫約定。對于縮寫的雙字母單詞,規定所有大寫。例如:ApplicationException
ID對象命名數據庫命名格式為[項目英文名稱]。
示例:AdventureWorks數據庫文獻數據文獻:[數據庫名稱]+_Data.mdf?日記文獻:[數據庫名稱]+_Log.ldf?示例:AdventureWorks_Data.mdf
AdventureWorks_Log.ldf數據表命名格式為BL_TBL_+[表名]。
示例:BL_TBL_Employee
BL_TBL_Product
表名以英文單數命名。
示例:使用BL_TBL_Product而不是BL_TBL_Products數據視圖命名格式為BL_V_+[視圖名稱]。
示例:BL_V_Employee
BL_V_SalesPerson數據列列名稱命名采用英文單詞或縮寫,英文單詞只來自于具體業務定義,盡量表達清楚含義。命名格式為[列名稱]。?示例:AddressID?
PostalCode?盡量避免使用拼音命名,假如不可避免,對于比較短的列名,采用拼音全寫,假如拼音列名比較復雜,可以采用首個字用全拼,其它字用首字母大寫表達。
示例:寧波Ningbo
經營方式JingYFS存儲過程命名格式為BL_HV_+[存儲過程名稱]。
示例:BL_HV_GetUser?
BL_HV_AddUser每個過程必須要有兩個輸出參數@ErrorCode和@ErrorMessage。存儲過程書寫格式如下:ifexists(select1fromsysobjectswhereid=object_id(‘bl_hv_Checkout’))dropprocedurebl_hv_CheckoutgocreateprocedureCheckout(….@ErrorCodeintoutput,--返回錯誤代碼0表達成功非0表達失敗@ErrorMessagevarchar(100)output--返回錯誤信息)asdeclare@checkoutidint,--變量聲明在此處…begin…endgo函數命名格式為BL_Fn_+[函數名]。
示例:BL_Fn_GetUser系統函數使用所有大寫。?示例:SELECTISNULL(@LastName,'Unknownlastname');
GETDATE()用戶定義數據類型命名格式為[自定義數據類型名稱]。
示例:Flag
NameStyle主鍵、索引主鍵:PK_[表名稱]_[主鍵];假如是組合主鍵,使用PK_[表名]_[主鍵1]_[主鍵2]。
示例:PK_BL_TBL_Store_CustomerID?
PK_BL_TBL_StoreContact_CustomerID_ContactID
聚集索引:PK_[表名稱]_[主鍵];假如是組合主鍵,使用PK_[表名]_[主鍵1]_[主鍵2]。
示例:PK_Store_CustomerID
PK_StoreContact_CustomerID_ContactID?唯一非聚集索引:AK_[表名稱]_[列名稱]。?示例:AK_Store_rowguid
不唯一非聚集索引:PK_[表名稱]_[列名稱]。
示例:IX_Store_SalesPersonID
主XML索引:PXML_[表名稱]_[Xml類型列名稱]。
示例:PXML_Store_Demographics參數命名
數據列參數命名格式為@+[列名稱]。
示例:@EmployeeID?在列名不符合Pascal樣式時(初期遺留系統),例如使用所有大寫的列名稱,或使用“_”進行連接的字段名稱,參數名稱定義使用@+[列名稱],這里的列名稱盡量符合Pascal樣式命名。非數據列參數在參數無法跟列名稱進行關聯時,使用可以反映該參數功能的英文單詞或單詞組合,采用Pascal樣式命名。
示例:@ErrorID?
@Flag常用字段命名這里的常用字段是指在建表時頻繁使用的表名或列名,下表對常用字段進行建議性定義,列名稱數據類型說明CreatedDatedatetime紀錄創建日期,一般使用GETDATE()自動生成ModifiedDatedatetime
紀錄最后修改日期,初次使用GETDATE()DeletedDatedatetime記錄刪除(標記刪除)日期StartDatedatetime開始日期EndDate
datetime結束日期StartTimedatetime開始時間EndTimedatetime結束時間ID
int
使用ID代替Id或idParentIDint父IDStatusint狀態SQL編寫大小寫大寫T-SQL語言的所有關鍵字,謂詞和系統函數。變量名稱及游標名稱使用Pascal樣式。數據類型定義使用所有小寫。
示例:DECLARE@LastNamenvarchar(32);存儲格式盡量采用Unicode數據存儲格式,提高可移植性和兼容性,實際應用中盡量使用nchar、nvarchar、ntext代替char、varchar、text。類型選擇假如字符具有明確的長度,使用nchar代替nvarchar;char代替varchar。在只有兩個也許數值時,使用bit代替int或smallint。在SQLServer2023中,使用nvarchar(MAX)代替ntext;varchar(MAX)代替text;varbinary(MAX)代替image。在特殊的數據表結構中可考慮xml數據類型,達成事半工倍的效果。默認值在建立數據表時,盡量使用默認值代替NULL值。比如設立CreatedDate列默認值為GETDATE()。在可行的情況下設立字段為不允許空。字段長度始終指定字符數據類型的長度,并保證允許用戶也許需要的最大字符數,避免超過最大長度時出現字符丟失現象。對于字符型數據,建議采用2的n次方來定義數據長度。示例:nvarchar(32)
varchar(64)使用“'”在T-SQL代碼中為字符常量使用單引號,避免使用雙引號。語句縮進一個嵌套代碼塊中的語句使用2個空格的縮進。語句換行建議SQL代碼每行以關鍵字或“'”開頭。示例:SELECT[ShiftID]
,[Name]
,[StartTime]
,[EndTime]
,[ModifiedDate]FROM[AdventureWorks].[HumanResources].[Shift]語句分割使用一個(而不是兩個)空行分隔T-SQL代碼的邏輯塊。使用“*”盡量避免在任何代碼中使用“SELECT*”。表名別名表名別名要簡短,但意義要盡量明確。通常使用大寫的表名作為別名,使用AS關鍵字指定表或字段的別名。類型轉換不要依賴任何隱式的數據類型轉換,不要假定T-SQL會進行必要的轉換。例如,把數字變量賦予字符值。相反,在為變量賦值或比較值之前,應使用適當的CONVERT函數使數據類型相匹配。數值比較不要將空的變量值直接與比較運算符(符號)比較。假如變量也許為空,應使用ISNULL或ISNOTNULL進行比較,或者使用ISNULL函數。排序決不要依賴SELECT語句會按任何特定順序返回行,除非在ORDERBY子句中指定了順序。通常,應將ORDERBY子句與SELECT語句一起使用。可預知的順序(即使不是最方便的)比不可預知的順序強,特別是在開發或調試過程中。在返回行的順序無關緊要的情況下,可以忽略ORDERBY,減少資源開銷。Unicode字符串在Unicode字符前面使用N前綴,避免引起數據的不一致。示例:--AssumesthedefaultcodepageisnotGreekCREATETABLE#t1(c1nchar(1))INSERT#t1VALUES(N'Ω')INSERT#t1VALUES('Ω')SELECT*FROM#t1輸出結果:c1
ΩOBEGIN...END塊在SQL代碼快中盡量使用BEGIN...END語句塊,提高代碼可閱讀性。TOP子句盡量使用TOP(變量)來減少SQL拼串現象。TRANSACTION編寫只要在例程中使用多個數據庫修改語句,涉及在一個循環中多次執行一個語句,就應考慮聲明顯式事務。實例:
BEGINTRANSACTIONTran_1;
UPDATE[HumanResources].[Employee]
SET[Title]=@Title
,[HireDate]=@HireDate
,[CurrentFlag]=@CurrentFlag
WHERE[EmployeeID]=@EmployeeID;
IF@@ERROR>0
BEGIN
ROLLBACKTRANSACTIONTran_1;
END
COMMITTRANSACTIONTran_1;存儲過程在編寫存儲過程時,使用PROCEDURE代替PROC簡寫。示例:CREATEPROCEDURE[dbo].[存儲過程名字]代碼注釋代碼頭部
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 酒店師徒結對協議書
- 表演培訓轉讓協議書
- 門面認購民間協議書
- 避險搬遷補償協議書
- 停車場租戶合同協議書
- 合伙包工程合同協議書
- 便利店合作合同協議書
- Brand KPIs for second-hand apparel online shops I Need Brechó in Brazil-外文版培訓課件(2025.2)
- 0萬離婚補償協議書
- Brand KPIs for shoes Barker in the United Kingdom-外文版培訓課件(2025.2)
- 嬰幼兒照護 課件 2遺尿現象的干預
- 2025年廣東省深圳市31校中考一模歷史試題及答案
- 餐飲廚房燃氣設備安全操作與維護
- 2025年上海勞動合同范本
- 高中生的規則意識教育
- 氧化碳氣瓶搬運、存放及使用管理制度
- 老年人安全用藥與護理
- 湖北省2024年本科提前批單設志愿錄取院校投檔線
- 動態葡萄糖圖譜報告護理應用專家共識解讀(2025年)解讀課件
- PowerPoint基礎教程課件教學課件
- 2025年浙江湖州市城市投資發展集團招聘筆試參考題庫含答案解析
評論
0/150
提交評論