<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      Payne's Blog

      No Pains,No Gains.

      導航

      Transact-SQL編程規范

      Transact-SQL編程規范

      Version 1.1

       

      發布日期:2007-01-22 | 更新日期:2007-04-06

      作者:鄭佐

       

      摘要:

      本文是筆者通過幾年軟件開發技術的積累,以及參考相關資料總結的一篇關于T-SQL語言編程規范的文章,旨在為需要這方面資料的IT公司設計開發人員提供一個參考。文章內容談不上面面俱到,并且一些見解也不一定恰當,如果讀者對本文有建議或意見,請在http://blog.csdn.net/zhzuo上留言和交流。

       

      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

       

      對數據庫對象 TableViewProcedureFunction等使用數據架構進行歸類。在SQL Server 2000dbo為默認架構。

       

      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 事件包括對表或視圖發出的 UPDATEINSERT DELETE 語句。根據事件不同命名規則使用前綴進行區分,格式為 [u|i|d] + [表名|視圖名]

      示例:uEmployee

        iEmployee

            dEmployee

       

      另外一種方式為,

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

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

       

      1.3.12.     DDL觸發器

      響應各種數據定義語言 (DDL) 事件而激發。這些事件主要與以關鍵字 CREATEALTER 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代替Idid。一般為自增長主鍵列

      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數據存儲格式,提高可移植性和兼容性,實際應用中盡量使用ncharnvarcharntext代替charvarchartext

       

      3.4. 類型選擇

      如果字符具有明確的長度,使用nchar代替nvarcharchar代替varchar

      在只有兩個可能數值時,使用bit代替intsmallint

      SQL Server 2005中,使用nvarchar(MAX)代替ntextvarchar(MAX)代替textvarbinary(MAX)代替image

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

       

      3.5. 默認值

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

       

      3.6. 字段長度

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

      示例: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-ddModify [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

      posted on 2007-05-19 20:53  Payne  閱讀(655)  評論(0)    收藏  舉報

      主站蜘蛛池模板: 久久涩综合一区二区三区| 影音先锋女人AA鲁色资源| 国产综合精品一区二区三区| 五月天天天综合精品无码| 狠狠综合久久av一区二| 特黄aaaaaaa片免费视频| 亚洲综合一区无码精品| 人妻无码av中文系列久| 精品久久人人妻人人做精品| 亚洲精品成人福利网站| 亚洲乱码中文字幕小综合| 国产精品疯狂输出jk草莓视频| 人妻少妇久久中文字幕| 婷婷久久综合九色综合88| 国产精品国产自产拍高清| 成人3d动漫一区二区三区 | 国产精品久久久一区二区三区| 免费无码高H视频在线观看| 77777五月色婷婷丁香视频| 国产一级区二级区三级区| 最新的国产成人精品2020 | 青青草国产精品日韩欧美| 亚洲最大在线精品| 国产精品国产高清国产av| 石柱| 日韩一区二区在线观看的| 国产精品一区在线蜜臀| 人妻人人做人做人人爱| 在线观看特色大片免费网站| 无套内谢少妇毛片aaaa片免费| 国产精品老熟女露脸视频| 清苑县| 久久久久免费看成人影片| 欧美成人无码a区视频在线观看 | 福利视频一区二区在线| 精品视频在线观自拍自拍| 蜜桃久久精品成人无码av| 在线观看国产成人av天堂| 杭锦后旗| 中文字幕久久国产精品| 午夜激情福利在线免费看|