




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
MSSQL腳本編碼規(guī)范福州星網(wǎng)視易信息系統(tǒng)有限公司更新記錄:版本作者日期內(nèi)容1.0黃晨東2023.09.09SQL腳本編寫(xiě)規(guī)范2.0蔡炆炆2023.10.15基于1.0版本進(jìn)行補(bǔ)充和整理?目錄TO(shè)C\o"1-3"\h\z\uHYPERLINK\l"_Toc"Transact-SQL編程規(guī)范?PAGEREF_Toc\h1HYPERLINK\l"_Toc"一、?概述?PAGEREF_Toc\h1HYPERLINK\l"_Toc"1. 基本原則?PAGEREF_Toc\h1HYPERLINK2. 基本規(guī)范?PAGEREF_Toc\h1HYPERLINK\l"_Toc"二、?對(duì)象命名 PAGEREF_Toc\h1HYPERLINK\l"_Toc"1.?數(shù)據(jù)庫(kù) PAGEREF_Toc\h1HYPERLINK\l"_Toc"2. 數(shù)據(jù)庫(kù)文獻(xiàn)?PAGEREF_Toc\h14.?數(shù)據(jù)視圖 PAGEREF_Toc\h2HYPERLINK\l"_Toc"5. 數(shù)據(jù)列?PAGEREF_Toc\h2HYPERLINK\l"_Toc"6.?存儲(chǔ)過(guò)程 PAGEREF_Toc\h2HYPERLINK\l"_Toc"7.?函數(shù) PAGEREF_Toc\h3HYPERLINK\l"_Toc"8.?用戶定義數(shù)據(jù)類型?PAGEREF_Toc\h3HYPERLINK\l"_Toc"9.?主鍵、索引 PAGEREF_Toc\h3HYPERLINK三、 參數(shù)命名?PAGEREF_Toc\h3HYPERLINK\l"_Toc"1.?數(shù)據(jù)列參數(shù) PAGEREF_Toc\h3HYPERLINK\l"_Toc"2. 非數(shù)據(jù)列參數(shù) PAGEREF_Toc\h4HYPERLINK\l"_Toc"3.?常用字段命名 PAGEREF_Toc\h4HYPERLINK四、?SQL編寫(xiě)?PAGEREF_Toc\h4HYPERLINK\l"_Toc"1. 大小寫(xiě)?PAGEREF_Toc\h4HYPERLINK\l"_Toc"2.?存儲(chǔ)格式 PAGEREF_Toc\h4HYPERLINK\l"_Toc"3. 類型選擇?PAGEREF_Toc\h4HYPERLINK4. 默認(rèn)值?PAGEREF_Toc\h5HYPERLINK6. 使用“'”?PAGEREF_Toc\h5HYPERLINK\l"_Toc"7. 語(yǔ)句縮進(jìn)?PAGEREF_Toc\h5HYPERLINK9.?語(yǔ)句分割?PAGEREF_Toc\h5HYPERLINK\l"_Toc"10. 使用“*” PAGEREF_Toc\h5HYPERLINK\l"_Toc"11. 表名別名 PAGEREF_Toc\h5HYPERLINK13. 數(shù)值比較?PAGEREF_Toc\h6HYPERLINK14.?排序 PAGEREF_Toc\h6HYPERLINK15.?Unicode字符串 PAGEREF_Toc\h6HYPERLINK16. BEGIN...END塊 PAGEREF_Toc\h6HYPERLINK\l"_Toc"17.?TOP子句 PAGEREF_Toc\h618.?TRANSACTION編寫(xiě) PAGEREF_Toc\h6HYPERLINK2. TRANSACTION注釋 PAGEREF_Toc\h7Transact-SQL編程規(guī)范概述本規(guī)范重要規(guī)定SQL腳本在書(shū)寫(xiě)過(guò)程中所應(yīng)遵循的規(guī)則及注意事項(xiàng)。編寫(xiě)該規(guī)范的目的是使公司軟件開(kāi)發(fā)人員的源代碼書(shū)寫(xiě)習(xí)慣保持一致。這樣做可以使每一個(gè)成員都可以理解其它成員的代碼,以便于源代碼的二次開(kāi)發(fā)記憶系統(tǒng)的維護(hù)?;驹瓌t以大小寫(xiě)敏感編寫(xiě)SQL語(yǔ)句。
盡量使用Unicode數(shù)據(jù)類型。?優(yōu)先使用連接代替子查詢或嵌套查詢。?盡量使用參數(shù)化SQL查詢代替語(yǔ)句拼接SQL查詢。?盡量使用存儲(chǔ)過(guò)程代替SQL語(yǔ)句。嚴(yán)禁使用[拼音]+[英語(yǔ)]的方式來(lái)命名SQL對(duì)象或變量。?嚴(yán)禁使用觸發(fā)器。?嚴(yán)禁在表間創(chuàng)建外鍵關(guān)系。嚴(yán)禁創(chuàng)建自增長(zhǎng)主鍵列基本規(guī)范采用Pascal樣式命名數(shù)據(jù)庫(kù)對(duì)象。大寫(xiě)T-SQL語(yǔ)言的所有關(guān)鍵字,謂詞和系統(tǒng)函數(shù)。Pascal大小寫(xiě):組成標(biāo)記符的每個(gè)單詞的首字母大寫(xiě),其余字母小寫(xiě)的書(shū)寫(xiě)約定。對(duì)于縮寫(xiě)的雙字母單詞,規(guī)定所有大寫(xiě)。例如:ApplicationException
ID對(duì)象命名數(shù)據(jù)庫(kù)命名格式為[項(xiàng)目英文名稱]。
示例:AdventureWorks數(shù)據(jù)庫(kù)文獻(xiàn)數(shù)據(jù)文獻(xiàn):[數(shù)據(jù)庫(kù)名稱]+_Data.mdf?日記文獻(xiàn):[數(shù)據(jù)庫(kù)名稱]+_Log.ldf?示例:AdventureWorks_Data.mdf
AdventureWorks_Log.ldf數(shù)據(jù)表命名格式為BL_TBL_+[表名]。
示例:BL_TBL_Employee
BL_TBL_Product
表名以英文單數(shù)命名。
示例:使用BL_TBL_Product而不是BL_TBL_Products數(shù)據(jù)視圖命名格式為BL_V_+[視圖名稱]。
示例:BL_V_Employee
BL_V_SalesPerson數(shù)據(jù)列列名稱命名采用英文單詞或縮寫(xiě),英文單詞只來(lái)自于具體業(yè)務(wù)定義,盡量表達(dá)清楚含義。命名格式為[列名稱]。?示例:AddressID?
PostalCode?盡量避免使用拼音命名,假如不可避免,對(duì)于比較短的列名,采用拼音全寫(xiě),假如拼音列名比較復(fù)雜,可以采用首個(gè)字用全拼,其它字用首字母大寫(xiě)表達(dá)。
示例:寧波Ningbo
經(jīng)營(yíng)方式JingYFS存儲(chǔ)過(guò)程命名格式為BL_HV_+[存儲(chǔ)過(guò)程名稱]。
示例:BL_HV_GetUser?
BL_HV_AddUser每個(gè)過(guò)程必須要有兩個(gè)輸出參數(shù)@ErrorCode和@ErrorMessage。存儲(chǔ)過(guò)程書(shū)寫(xiě)格式如下:ifexists(select1fromsysobjectswhereid=object_id(‘bl_hv_Checkout’))dropprocedurebl_hv_Checkoutgocreat(yī)eprocedureCheckout(….@ErrorCodeintoutput,--返回錯(cuò)誤代碼0表達(dá)成功非0表達(dá)失敗@ErrorMessagevarchar(100)output--返回錯(cuò)誤信息)asdeclare@checkoutidint,--變量聲明在此處…begin…endgo函數(shù)命名格式為BL_Fn_+[函數(shù)名]。
示例:BL_Fn_GetUser系統(tǒng)函數(shù)使用所有大寫(xiě)。?示例:SELECTISNULL(@LastName,'Unknownlastname');
GETDATE()用戶定義數(shù)據(jù)類型命名格式為[自定義數(shù)據(jù)類型名稱]。
示例: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_SalesPersonI(lǐng)D
主XML索引:PXML_[表名稱]_[Xml類型列名稱]。
示例:PXML_Store_Demographics參數(shù)命名
數(shù)據(jù)列參數(shù)命名格式為@+[列名稱]。
示例:@Employee(cuò)ID?在列名不符合Pascal樣式時(shí)(初期遺留系統(tǒng)),例如使用所有大寫(xiě)的列名稱,或使用“_”進(jìn)行連接的字段名稱,參數(shù)名稱定義使用@+[列名稱],這里的列名稱盡量符合Pascal樣式命名。非數(shù)據(jù)列參數(shù)在參數(shù)無(wú)法跟列名稱進(jìn)行關(guān)聯(lián)時(shí),使用可以反映該參數(shù)功能的英文單詞或單詞組合,采用Pascal樣式命名。
示例:@ErrorID?
@Flag常用字段命名這里的常用字段是指在建表時(shí)頻繁使用的表名或列名,下表對(duì)常用字段進(jìn)行建議性定義,列名稱數(shù)據(jù)類型說(shuō)明CreatedDatedat(yī)etime紀(jì)錄創(chuàng)建日期,一般使用GETDATE()自動(dòng)生成ModifiedDat(yī)edatetime
紀(jì)錄最后修改日期,初次使用GETDATE()DeletedDatedat(yī)etime記錄刪除(標(biāo)記刪除)日期StartDatedatetime開(kāi)始日期EndDate
datetime結(jié)束日期StartTimedatetime開(kāi)始時(shí)間EndTimedat(yī)etime結(jié)束時(shí)間ID
int
使用ID代替Id或idParentIDint父IDStatusint狀態(tài)SQL編寫(xiě)大小寫(xiě)大寫(xiě)T-SQL語(yǔ)言的所有關(guān)鍵字,謂詞和系統(tǒng)函數(shù)。變量名稱及游標(biāo)名稱使用Pascal樣式。數(shù)據(jù)類型定義使用所有小寫(xiě)。
示例:DECLARE@LastNamenvarchar(32);存儲(chǔ)格式盡量采用Unicode數(shù)據(jù)存儲(chǔ)格式,提高可移植性和兼容性,實(shí)際應(yīng)用中盡量使用nchar、nvarchar、ntext代替char、varchar、text。類型選擇假如字符具有明確的長(zhǎng)度,使用nchar代替nvarchar;char代替varchar。在只有兩個(gè)也許數(shù)值時(shí),使用bit代替int或smallint。在SQLServer2023中,使用nvarchar(MAX)代替ntext;varchar(MAX)代替text;varbinary(MAX)代替image。在特殊的數(shù)據(jù)表結(jié)構(gòu)中可考慮xml數(shù)據(jù)類型,達(dá)成事半工倍的效果。默認(rèn)值在建立數(shù)據(jù)表時(shí),盡量使用默認(rèn)值代替NULL值。比如設(shè)立CreatedDate列默認(rèn)值為GETDATE()。在可行的情況下設(shè)立字段為不允許空。字段長(zhǎng)度始終指定字符數(shù)據(jù)類型的長(zhǎng)度,并保證允許用戶也許需要的最大字符數(shù),避免超過(guò)最大長(zhǎng)度時(shí)出現(xiàn)字符丟失現(xiàn)象。對(duì)于字符型數(shù)據(jù),建議采用2的n次方來(lái)定義數(shù)據(jù)長(zhǎng)度。示例:nvarchar(32)
varchar(64)使用“'”在T-SQL代碼中為字符常量使用單引號(hào),避免使用雙引號(hào)。語(yǔ)句縮進(jìn)一個(gè)嵌套代碼塊中的語(yǔ)句使用2個(gè)空格的縮進(jìn)。語(yǔ)句換行建議SQL代碼每行以關(guān)鍵字或“'”開(kāi)頭。示例:SELECT[ShiftID]
,[Name]
,[StartTime]
,[EndTime]
,[ModifiedDate]FROM[AdventureWo(hù)rks].[HumanResources].[Shift]語(yǔ)句分割使用一個(gè)(而不是兩個(gè))空行分隔T-SQL代碼的邏輯塊。使用“*”盡量避免在任何代碼中使用“SELECT*”。表名別名表名別名要簡(jiǎn)短,但意義要盡量明確。通常使用大寫(xiě)的表名作為別名,使用AS關(guān)鍵字指定表或字段的別名。類型轉(zhuǎn)換不要依賴任何隱式的數(shù)據(jù)類型轉(zhuǎn)換,不要假定T-SQL會(huì)進(jìn)行必要的轉(zhuǎn)換。例如,把數(shù)字變量賦予字符值。相反,在為變量賦值或比較值之前,應(yīng)使用適當(dāng)?shù)腃ONVERT函數(shù)使數(shù)據(jù)類型相匹配。數(shù)值比較不要將空的變量值直接與比較運(yùn)算符(符號(hào))比較。假如變量也許為空,應(yīng)使用ISNULL或ISNOTNULL進(jìn)行比較,或者使用ISNULL函數(shù)。排序決不要依賴SELECT語(yǔ)句會(huì)按任何特定順序返回行,除非在ORDERBY子句中指定了順序。通常,應(yīng)將ORDERBY子句與SELECT語(yǔ)句一起使用??深A(yù)知的順序(即使不是最方便的)比不可預(yù)知的順序強(qiáng),特別是在開(kāi)發(fā)或調(diào)試過(guò)程中。在返回行的順序無(wú)關(guān)緊要的情況下,可以忽略ORDERBY,減少資源開(kāi)銷。Unicode字符串在Unicode字符前面使用N前綴,避免引起數(shù)據(jù)的不一致。示例:--AssumesthedefaultcodepageisnotGreekCREATETABLE#t1(c1nchar(1))INSERT#t1VALUES(N'Ω')INSERT#t1VALUES('Ω')SELECT*FROM#t1輸出結(jié)果:c1
ΩOBEGIN...END塊在SQL代碼快中盡量使用BEGIN...END語(yǔ)句塊,提高代碼可閱讀性。TOP子句盡量使用TOP(變量)來(lái)減少SQL拼串現(xiàn)象。TRANSACTION編寫(xiě)只要在例程中使用多個(gè)數(shù)據(jù)庫(kù)修改語(yǔ)句,涉及在一個(gè)循環(huán)中多次執(zhí)行一個(gè)語(yǔ)句,就應(yīng)考慮聲明顯式事務(wù)。實(shí)例:
BEGINTRANSACTIONTran_1;
UPDATE[HumanResources].[Employee]
SET[Title]=@Title
,[HireDat(yī)e]=@HireDate
,[CurrentFlag]=@CurrentFlag
WHERE[Employee(cuò)ID]=@EmployeeID;
IF@@ERROR>0
BEGIN
ROLLBACKTRANSACTIONTran_1;
END
COMMITTRANSACTIONTran_1;存儲(chǔ)過(guò)程在編寫(xiě)存儲(chǔ)過(guò)程時(shí),使用PROCEDURE代替PROC簡(jiǎn)寫(xiě)。示例:CREATEPROCEDURE[dbo].[存儲(chǔ)過(guò)程名字]代碼注釋代碼頭部
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- Unit 5 There is a big bed Story time(教學(xué)設(shè)計(jì))-人教PEP版英語(yǔ)五年級(jí)上冊(cè)
- 浙江國(guó)企招聘2025年杭州市拱墅區(qū)國(guó)有企業(yè)公開(kāi)招聘工作人員9人筆試歷年參考題庫(kù)附帶答案詳解(3卷合一)
- 7.2“魚(yú)米之鄉(xiāng)”-長(zhǎng)江三角洲 說(shuō)課稿-2023-2024學(xué)年八年級(jí)地理下學(xué)期人教版
- 編創(chuàng) 森林里的小姑娘教學(xué)設(shè)計(jì)小學(xué)音樂(lè)滬教版三年級(jí)下冊(cè)-滬教版
- 2024年秋二年級(jí)道德與法治下冊(cè) 第五單元 愉快的收獲 13 我在長(zhǎng)大說(shuō)課稿 教科版
- 2025年物業(yè)管理政策法規(guī)考試試題題庫(kù)及答案
- 微項(xiàng)目 自制米酒 -領(lǐng)略我國(guó)傳統(tǒng)釀造工藝的魅力說(shuō)課稿-2025-2026學(xué)年高中化學(xué)魯科版2019必修第二冊(cè)-魯科版2019
- 2025年嗶哩嗶哩對(duì)口護(hù)理題庫(kù)及答案
- 2025年贛南醫(yī)學(xué)院護(hù)理教育題庫(kù)及答案
- 2025年康達(dá)專轉(zhuǎn)本護(hù)理題庫(kù)及答案
- 2025年西藏自治區(qū)事業(yè)單位招聘《公共基礎(chǔ)》考試題庫(kù)及答案解析
- 統(tǒng)編版2025-2026學(xué)年語(yǔ)文六年級(jí)上冊(cè)第一、二單元綜合測(cè)試卷(有答案)
- 2025年國(guó)企面試題型及答案
- 5年(2021-2025)高考1年模擬物理真題分類匯編專題04 機(jī)械能守恒、動(dòng)量守恒及功能關(guān)系(廣東專用)(解析版)
- 石刻牌坊施工方案
- 2025陜西“堅(jiān)持以教育家精神鑄魂強(qiáng)師打造支撐教育強(qiáng)國(guó)的高素質(zhì)專業(yè)化教師隊(duì)伍”專題網(wǎng)絡(luò)培訓(xùn)在線考試(基教)題答案
- T-CWAN 0166-2025 不銹鋼波紋管非熔化極氣體保護(hù)焊工藝規(guī)范
- 2025-2026浙教版(2024)七年級(jí)上冊(cè)科學(xué)教學(xué)計(jì)劃
- 2025年全國(guó)中小學(xué)生天文知識(shí)競(jìng)賽試題庫(kù)
- 運(yùn)動(dòng)醫(yī)學(xué)培訓(xùn)體系構(gòu)建
- 2025年中煤職稱計(jì)算機(jī)考試題庫(kù)
評(píng)論
0/150
提交評(píng)論