欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

T-SQL編碼標準

系統 3972 0

1.? 概述

1.1. 基本原則
以大小寫敏感編寫SQL語句。

盡量使用Unicode 數據類型。

優先使用連接代替子查詢或嵌套查詢。

盡量使用參數化SQL查詢代替語句拼接SQL查詢。

禁止使用[拼音]+[英語]的方式來命名SQL對象或變量。

盡量使用存儲過程代替SQL語句。

1.2. 基本規范
建議采用Pascal樣式或Camel樣式命名數據庫對象。

大寫T-SQL語言的所有關鍵字,謂詞和系統函數。

2.? 命名規范
在一般情況下,采用Pascal樣式或Camel樣式命名數據庫對象,使在開發基于數據庫應用 程序 的時候通過ORM 工具 生成的數據訪問代碼不需要調整就符合 程序 開發語言(比如C#)命名規范。另外,關系型數據庫同Xml結合得越來越緊密,規范的命名越來越重要。

在實際數據庫開發過程中,如果需求方已經提供數據庫設計方案,建議以提供的方案為準;在原有數據庫上進行升級開發時,在可行的情況下可適當做出設計調整以符合 編程 規范。

1.3. 對象命名
1.3.1.? 數據庫
第一種方式,采用Pascal樣式命名,命名格式為[項目英文名稱]。

示例:AdventureWorks

第二種方式,采用Pascal樣式命名,命名格式為[項目英文名稱] + Db。

示例:AdventureWorksDb

? BizTalkRuleEngineDb

建議采用第一種方式。

1.3.2.? 數據庫文件
數據文件:[數據庫名稱] + _Data.mdf

日志文件:[數據庫名稱] + _Log.ldf

示例:AdventureWorks_Data.mdf

????? AdventureWorks_Log.ldf

1.3.3.? 關系型數據倉庫
采用Pascal樣式命名,命名格式為[項目英文名稱] + DW。

示例:AdventureWorksDW

1.3.4.? 數據架構
除SQL Server 系統定義的數據架構外,新建架構采用Pascal樣式命名,命名格式為[架構名]。

示例:HumanResources

????? Production

對數據庫對象 Table,View,Procedure,Function等使用數據架構進行歸類。在SQL Server 2000中dbo為默認架構。

1.3.5.? 數據表
采用Pascal樣式命名,命名格式為[表名]。

示例:Employee

????? Product

表名以英文單數命名,主要是參考SQL Server 2005示例數據庫,個人理解不采用復數是為了更好的使用ORM 工具 生成符合 編程 規范的代碼(比如C#)。

示例:使用Product

? 而不是Products

1.3.6.? 數據視圖
視圖名稱采用Pascal樣式命名,命名格式為v + [視圖名稱]。

示例:vEmployee

????? vSalesPerson

1.3.7.? 數據列
列名稱命名采用英文單詞或縮寫,英文單詞只來自于具體業務定義,盡量表達清楚含義。采用Pascal樣式命名,命名格式為[列名稱]。

示例:AddressID

????? PostalCode

盡量避免使用拼音命名,如果不可避免,對于比較短的列名,采用拼音全寫,如果拼音列名比較復雜,可以采用首個字用全拼,其它字用首字母大寫表示。

示例:寧波 Ningbo

? 經營方式 JingYFS

1.3.8.? 存儲過程
建議采用Pascal樣式命名,命名格式為[存儲過程名稱]。

示例:GetUser

???? AddUser

備注:在SQL Server 2005示例數據庫中使用Camel樣式命名。

1.3.9.? 函數
自定義函數采用Pascal樣式命名,命名格式為[函數名],系統函數使用全部大寫。

示例:SELECT ISNULL(@LastName,'Unknown last name');

GETDATE()

1.3.10.???? 用戶定義數據類型
采用Pascal樣式命名,命名格式為[自定義數據類型名稱]。

示例:Flag

????? NameStyle

1.3.11.???? DML觸發器
DML觸發器是當數據庫服務器中發生數據操作語言 (DML) 事件時要執行的操作。DML 事件包括對表或視圖發出的 UPDATE、INSERT 或 DELETE 語句。根據事件不同命名規則使用前綴進行區分,格式為 [u|i|d] + [表名|視圖名]

示例:uEmployee

? iEmployee

????? dEmployee

另外一種方式為,

AFTER 觸發器:TR_表名_[后面插入加I,修改加U,刪除加D]。

INSTEAD OF 觸發器:TR_表名或視圖名_OF[后面插入加I,修改加U,刪除加D]

1.3.12.???? DDL觸發器
響應各種數據定義語言 (DDL) 事件而激發。這些事件主要與以關鍵字 CREATE、ALTER 和 DROP 開頭的 Transact-SQL 語句對應。執行 DDL 式操作的系統存儲過程也可以激發 DDL 觸發器。

采用Camel樣式命名,命名單詞能夠描述DDL觸發器功能。

示例:

CREATE TRIGGER safety

ON DATABASE

FOR DROP_TABLE, ALTER_TABLE

AS

?? PRINT 'You must disable Trigger "safety" to drop or alter tables!'

?? ROLLBACK ;

另外一種方式為添加ddl前綴,

示例:

CREATE TRIGGER [ddlDatabaseTriggerLog]

ON DATABASE

FOR DDL_DATABASE_LEVEL_EVENTS

AS

1.3.13.???? 主鍵、外鍵關系和索引
主鍵: PK_[表名稱]_[主鍵];如果是組合主鍵,使用PK_[表名]_[主鍵1]_[主鍵2]。

示例:PK_Store_CustomerID

? PK_StoreContact_CustomerID_ContactID

外鍵關系:FK_[從表名稱]_[主表名稱]_[外鍵列名稱]。

示例:FK_StoreContact_Store_CustomerID

聚集索引: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

備注:以上命名參考Sql Server 2005示例數據庫,一般只需設計器自動生成,不需要額外修改。

1.4. 參數命名
1.4.1.? 數據列參數
命名格式為 @ + [列名稱]。

示例:@EmployeeID

在列名不符合Pascal樣式時(早期遺留系統),例如使用全部大寫的列名稱,或使用“_”進行連接的字段名稱,參數名稱定義使用 @ + [列名稱],這里的列名稱盡量符合Pascal樣式命名。

1.4.2.? 非數據列參數
在參數無法跟列名稱進行關聯時,使用能夠反映該參數功能的英文單詞或單詞組合, 采用Pascal樣式命名。

示例:@ErrorID

????? @Flag

1.5. 常見命名
1.5.1.? 常用字段命名
這里的常用字段是指在建表時頻繁使用的表名或列名,下表對常用字段進行建議性定義,

列名稱????????? 數據類型???????????? 說明

CreatedDate???? datetime??????????????? 紀錄創建日期,一般使用GETDATE()自動生成

ModifiedDate??????? datetime??????????????? 紀錄最后修改日期,首次使用GETDATE()

DeletedDate???? datetime??????????????? 記錄刪除(標記刪除)日期

StartDate?????? datetime??????????????? 開始日期

EndDate???????? datetime??????????????? 結束日期

StartTime?????? datetime??????????????? 開始時間

EndTime???????? datetime??????????????? 結束時間

rowguid???????? uniqueidentifier??????? 唯一標識行的ROWGUIDCOL號,用于支持合并復制

ID????????????? int???????????????? 使用ID代替Id或id。一般為自增長主鍵列

ParentID??????????? int???????????????? 父ID

Status????????? int???????????????? 狀態

3.? SQL編寫
3.1. 大小寫
大寫T-SQL 語言的所有關鍵字,謂詞和系統函數。變量名稱及游標名稱使用Pascal樣式。數據類型定義使用全部小寫。

示例:DECLARE @LastName nvarchar(32);

3.2. 使用“;”
使用“;”作為 Transact-SQL 語句終止符。雖然分號不是必需的,但使用它是一種好的習慣。

示例:

USE AdventureWorks;

GO

DECLARE @find varchar(30);

SET @find = 'Man%';

SELECT LastName, FirstName, Phone

FROM Person.Contact

WHERE LastName LIKE @find;

3.3. 存儲格式
盡量采用Unicode數據存儲格式,提高可移植性和兼容性,實際應用中盡量使用nchar、nvarchar、ntext代替char、varchar、text。

3.4. 類型選擇
如果字符具有明確的長度,使用nchar代替nvarchar;char代替varchar。

在只有兩個可能數值時,使用bit代替int或smallint。

在SQL Server 2005中,使用nvarchar(MAX)代替ntext;varchar(MAX)代替text;varbinary(MAX)代替image。

在特殊的數據表結構中可考慮xml數據類型,達到事半工倍的效果。

3.5. 默認值
在建立數據表時,盡量使用默認值代替NULL值。比如設置CreatedDate列默認值為GETDATE()。在可行的情況下設置字段為不允許空。

3.6. 字段長度
始終指定字符數據類型的長度,并確保允許用戶可能需要的最大字符數,避免超出最大長度時出現字符丟失現象。對于字符型數據,建議采用2的n次方來定義數據長度。

示例:nvarchar(32)

? varchar(64)

3.7. 使用“'”
在 T-SQL 代碼中為字符常量使用單引號,避免使用雙引號。

3.8. 語句縮進
一個嵌套代碼塊中的語句使用四個空格的縮進。使用Microsoft SQL Server Management Studio ,選擇“ 工具 ”菜單,打開“選項”菜單,在選項對話框中選擇文本編輯器->純文本->制表符,選中“插入空格單選框”,設置“制表符大小”為4,縮進大小為“4”。

3.9. 語句換行
建議SQL代碼每行以關鍵字或“'”開頭。

示例:

SELECT [ShiftID]

????? ,[Name]

????? ,[StartTime]

????? ,[EndTime]

????? ,[ModifiedDate]

? FROM [AdventureWorks].[HumanResources].[Shift]

3.10.?? 語句分割
使用一個(而不是兩個)空行分隔 T-SQL 代碼的邏輯塊。

3.11.?? 使用“*”
盡量避免在任何代碼中使用 “SELECT *”。

3.12.?? 表名別名
表名別名要簡短,但意義要盡量明確。通常使用大寫的表名作為別名,使用 AS 關鍵字指定表或字段的別名。

3.13.?? 類型轉換
不要依賴任何隱式的數據類型轉換,不要假定 T-SQL 會進行必要的轉換。例如,把數字變量賦予字符值。相反,在為變量賦值或比較值之前,應使用適當的 CONVERT 函數使數據類型相匹配。

3.14.?? 數值比較
不要將空的變量值直接與比較運算符(符號)比較。如果變量可能為空,應使用 IS NULL 或 IS NOT NULL 進行比較,或者使用 ISNULL 函數。

3.15.?? 排序
決不要依賴 SELECT 語句會按任何特定順序返回行,除非在 ORDER BY 子句中指定了順序。通常,應將 ORDER BY 子句與 SELECT 語句一起使用。可預知的順序(即使不是最方便的)比不可預知的順序強,尤其是在開發或調試過程中。在返回行的順序無關緊要的情況下,可以忽略 ORDER BY ,減少資源開銷。

3.16.?? Unicode字符串
在Unicode字符前面使用N前綴,避免引起數據的不一致。

示例:

-- Assumes the default code page is not Greek

CREATE TABLE #t1 (c1 nchar(1))

INSERT #t1 VALUES(N'Ω')

INSERT #t1 VALUES('Ω')

SELECT * FROM #t1

輸出結果:

c1??

----

Ω

O

3.17.?? BEGIN...END 塊
在SQL代碼快中盡量使用BEGIN...END 語句塊,提高代碼可閱讀性。

3.18.?? TRY塊
在SQL Server 2005中對一些可能執行失敗的語句盡量使用TRY塊。Transact-SQL 語句組可以包含在 TRY 塊中,如果 TRY 塊內部發生錯誤,則會將控制傳遞給 CATCH 塊中包含的另一個語句組。

示例:

BEGIN TRY

??? SQL 語句組1

END TRY

BEGIN CATCH

??? SQL 語句組2

END CATCH;

3.19.?? TOP子句
在SQL Server 2005中加強了TOP的使用,盡量使用TOP(變量)來減少SQL拼串現象。

3.20.?? TRANSACTION編寫
只要在例程中使用多個數據庫修改語句,包括在一個循環中多次執行一個語句,就應考慮聲明顯式事務。在SQL SERVER 2005 中,增加了TRY塊可進行很好的應用。

實例:

??? BEGIN TRY

??????? BEGIN TRANSACTION;

??????? UPDATE [HumanResources].[Employee]

??????? SET [Title] = @Title

??????????? ,[HireDate] = @HireDate

??????????? ,[CurrentFlag] = @CurrentFlag

??????? WHERE [EmployeeID] = @EmployeeID;

??????? INSERT INTO [HumanResources].[EmployeePayHistory]

??????????? ([EmployeeID]

??????????? ,[RateChangeDate]

??????????? ,[Rate]

??????????? ,[PayFrequency])

??????? VALUES (@EmployeeID, @RateChangeDate, @Rate, @PayFrequency);

??????? COMMIT TRANSACTION;

??? END TRY

??? BEGIN CATCH

??????? -- Rollback any active or uncommittable transactions before

??????? -- inserting information in the ErrorLog

??????? IF @@TRANCOUNT > 0

??????? BEGIN

??????????? ROLLBACK TRANSACTION;

??????? END

??????? EXECUTE [dbo].[uspLogError];

??? END CATCH;

3.21.?? 存儲過程
在編寫存儲過程時,使用PROCEDURE 代替 PROC 簡寫。

示例:CREATE PROCEDURE [dbo].[存儲過程名字]

4.? 代碼注釋
4.1. 代碼頭部注釋
在SQL代碼塊(sql文件或存儲過程)的頭部進行注釋,標注創建人(Author)、創始日期(Create date)、修改信息(Modify [n])。

格式:

-- =============================================

-- Author:????? <Author,,Name>

-- Create date: <Create Date,,>

-- Description: <Description,,>

-- Modify [n]:? < Modifier,Date, Description >

-- =============================================

示例:

-- ================================================

-- Author:????? Zhanghaifeng

-- Create date: 2006-12-25

-- Description: H2000報關單回執處理

-- Modify [1]:? 鄭佐, 2006-12-31, 簡化邏輯判斷流程

-- Modify [2]:? 鄭佐, 2007-01-20, 更新條件判斷

-- ================================================

注:日期格式使用 yyyy-MM-dd。Modify [n] n代表修改序號,從1開始,每次修改加1。

4.2. TRANSACTION注釋
建議在每個事務的開頭進行注釋,說明該事務的功能。

-- < Modifier,Date, Description >

BEGIN TRANSACTION;

5.? 附錄A 命名規則
常見命名規則有四種樣式:完全大寫、完全小寫、Pascal 大小寫和 Camel 大小寫。

5.1. Pascal 大小寫
組成標識符的每個單詞的首字母大寫,其余字母小寫的書寫約定。對于縮寫的雙字母單詞,要求全部大寫。

例如:ApplicationException

????? ID

5.2. Camel 大小寫
標識符的首字母小寫,每個后面連接的單詞的首字母大寫,其余字母小寫的書寫約定。對于縮寫的雙字母單詞,要求它們出現在標識符首部時全部小寫,否則全部大寫。

例如:applicationException

????? id

5.3. 匈牙利命名法
匈牙利命名法由匈牙利 程序 員發明,他在微軟工作了多年,此命名法就是通過微軟的各種產品和 文檔 傳出來。多數有經驗的 程序 員,不管他們用的是哪門語言,都或多或少在使用它。

基本原則:變量名 = 屬性 + 類型 + 對象描述

即一個變量名是由三部分信息組成,這樣, 程序 員很容易理解變量的類型、用途,而且便于記憶。

6.? 附錄B 參考資源
6.1. Microsoft SQL Server 2005 聯機叢書
http://www.microsoft.com/downloads/details.aspx?displaylang=zh-cn&FamilyID=BE6A2C5D-00DF-4220-B133-29C1E0B6585F

6.2. SQL Server 2005示例數據庫
AdventureWorks

AdventureWorksDW

6.3. 編寫可移植的 Transact-SQL 代碼
http://www.microsoft.com/china/msdn/library/data/sqlserver/USsqldnsqldevdev_06112004L.mspx

6.4. T-SQL 編碼標準
http://www.microsoft.com/china/msdn/library/data/sqlserver/sp04l9.mspx

T-SQL編碼標準


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 亚洲国产一区二区视频 | 成人国产永久福利看片 | 欧美一级欧美三级在线观看 | 亚洲一区二区三区在线免费观看 | 一级欧美黄色片 | 成人嗯啊视频在线观看 | 欧美一级在线免费 | 日本人视频jizz页码69 | 欧美老妇交乱视频 | 国产成人精品影院狼色在线 | 色综合天天综合网国产成人网 | 黄色一级小视频 | 亚洲国产精品成人 | 国产精品手机在线观看 | 亚洲日韩色图 | 国产成人久久婷婷精品流白浆 | 狠狠色噜噜狠狠狠97影音先锋 | 国产精品国产精品国产专区不卡 | 天天天天天天操 | 99re6在线 | 日韩精品一区二 | 亚洲欧美一区二区三区在线 | 国产成人福利 | 久操伊人 | 天天草夜夜爽 | 性欧美一区 | 欧美精品免费xxxxx视频 | av免费网站在线观看 | 日本高清视频www夜色资源网 | 亚洲午夜精品久久久久久成年 | 国精品日韩欧美一区二区三区 | 欧美18videosex性欧美群 | 色妇色综合久久夜夜 | 操免费视频 | 日本视频免费高清一本18 | 99久久精品国产亚洲 | 色呦呦在线观看视频 | 久久这里只精品国产99热 | 一区精品视频 | 亚洲嗯啊 | 国产福利视频在线观看 |