程序员培训-SQL编码规范_第1页
程序员培训-SQL编码规范_第2页
程序员培训-SQL编码规范_第3页
程序员培训-SQL编码规范_第4页
程序员培训-SQL编码规范_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

MS SQL脚本编码规范福州星网视易信息系统有限公司目录Transact-SQL编程规范1一、概述11.基本原则12.基本规范1二、对象命名11.数据库12.数据库文件13.数据表24.数据视图25.数据列26.存储过程27.函数38.用户定义数据类型39.主键、索引3三、参数命名31.数据列参数32.非数据列参数43.常用字段命名4四、SQL编写41.大小写42.存储格式43.类型选择44.默认值55.字段长度56.使用“”57.语句缩进58.语句换行59.语句分割510.使用“*”511.表名别名512.类型转换513.数值比较614.排序615.Unicode字符串616.BEGIN.END 块617.TOP子句618.TRANSACTION编写619.存储过程7五、代码注释71.代码头部注释72.TRANSACTION注释7福州星网视易信息系统有限公司 Transact-SQL编程规范一、 概述本规范主要规定SQL脚本在书写过程中所应遵循的规则及注意事项。编写该规范的目的是使公司软件开发人员的源代码书写习惯保持一致。这样做可以使每一个组员都可以理解其它组员的代码,以便于源代码的二次开发记忆系统的维护。1. 基本原则以大小写敏感编写SQL语句。尽量使用Unicode 数据类型。优先使用连接代替子查询或嵌套查询。尽量使用参数化SQL查询代替语句拼接SQL查询。尽量使用存储过程代替SQL语句。禁止使用拼音+英语的方式来命名SQL对象或变量。禁止使用触发器。禁止在表间创建外键关系。禁止创建自增长主键列2. 基本规范采用Pascal样式命名数据库对象。大写T-SQL语言的所有关键字,谓词和系统函数。Pascal 大小写:组成标识符的每个单词的首字母大写,其余字母小写的书写约定。对于缩写的双字母单词,要求全部大写。例如:ApplicationException ID二、 对象命名1. 数据库命名格式为项目英文名称。示例:AdventureWorks2. 数据库文件数据文件:数据库名称 + _Data.mdf日志文件:数据库名称 + _Log.ldf示例:AdventureWorks_Data.mdf AdventureWorks_Log.ldf3. 数据表命名格式为BL_TBL_+表名。示例:BL_TBL_Employee BL_TBL_Product表名以英文单数命名。示例:使用BL_TBL_Product 而不是BL_TBL_Products4. 数据视图命名格式为BL_V_+ 视图名称。示例:BL_V_Employee BL_V_SalesPerson5. 数据列列名称命名采用英文单词或缩写,英文单词只来自于具体业务定义,尽量表达清楚含义。命名格式为列名称。示例:AddressID PostalCode尽量避免使用拼音命名,如果不可避免,对于比较短的列名,采用拼音全写,如果拼音列名比较复杂,可以采用首个字用全拼,其它字用首字母大写表示。示例:宁波 Ningbo 经营方式 JingYFS6. 存储过程命名格式为BL_HV_ +存储过程名称。示例:BL_HV_GetUser BL_HV_AddUser每个过程必须要有两个输出参数ErrorCode和ErrorMessage。存储过程书写格式如下:if exists(select 1 from sysobjects where id=object_id(bl_hv_Checkout)drop procedure bl_hv_Checkoutgocreate procedure Checkout( .ErrorCode int output, -返回错误代码 0表示成功 非0 表示失败 ErrorMessage varchar(100) output -返回错误信息)asdeclare checkoutid int, -变量声明在此处 beginendgo7. 函数命名格式为BL_Fn_ +函数名 。示例:BL_Fn_GetUser系统函数使用全部大写。示例:SELECT ISNULL(LastName,Unknown last name); GETDATE()8. 用户定义数据类型命名格式为自定义数据类型名称。示例:Flag NameStyle9. 主键、索引主键: 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三、 参数命名1. 数据列参数命名格式为 + 列名称。示例:EmployeeID在列名不符合Pascal样式时(早期遗留系统),例如使用全部大写的列名称,或使用“_”进行连接的字段名称,参数名称定义使用 + 列名称,这里的列名称尽量符合Pascal样式命名。2. 非数据列参数在参数无法跟列名称进行关联时,使用能够反映该参数功能的英文单词或单词组合, 采用Pascal样式命名。示例:ErrorID Flag3. 常用字段命名这里的常用字段是指在建表时频繁使用的表名或列名,下表对常用字段进行建议性定义, 列名称数据类型说明CreatedDatedatetime纪录创建日期,一般使用GETDATE()自动生成ModifiedDatedatetime纪录最后修改日期,首次使用GETDATE()DeletedDatedatetime记录删除(标记删除)日期StartDatedatetime开始日期EndDatedatetime结束日期StartTimedatetime开始时间EndTimedatetime结束时间IDint使用ID代替Id或idParentIDint父IDStatusint状态四、 SQL编写1. 大小写大写T-SQL 语言的所有关键字,谓词和系统函数。变量名称及游标名称使用Pascal样式。数据类型定义使用全部小写。示例:DECLARE LastName nvarchar(32) ;2. 存储格式尽量采用Unicode数据存储格式,提高可移植性和兼容性,实际应用中尽量使用nchar、nvarchar、ntext代替char、varchar、text。3. 类型选择如果字符具有明确的长度,使用nchar代替nvarchar;char代替varchar。在只有两个可能数值时,使用bit代替int或smallint。在SQL Server 2005中,使用nvarchar(MAX)代替ntext;varchar(MAX)代替text;varbinary(MAX)代替image。在特殊的数据表结构中可考虑xml数据类型,达到事半工倍的效果。4. 默认值在建立数据表时,尽量使用默认值代替NULL值。比如设置CreatedDate列默认值为GETDATE()。在可行的情况下设置字段为不允许空。5. 字段长度始终指定字符数据类型的长度,并确保允许用户可能需要的最大字符数,避免超出最大长度时出现字符丢失现象。对于字符型数据,建议采用2的n次方来定义数据长度。示例:nvarchar(32) varchar(64)6. 使用“”在 T-SQL 代码中为字符常量使用单引号,避免使用双引号。7. 语句缩进一个嵌套代码块中的语句使用2个空格的缩进。8. 语句换行建议SQL代码每行以关键字或“”开头。示例:SELECT ShiftID ,Name ,StartTime ,EndTime ,ModifiedDateFROM AdventureWorks.HumanResources.Shift9. 语句分割使用一个(而不是两个)空行分隔 T-SQL 代码的逻辑块。10. 使用“*”尽量避免在任何代码中使用 “SELECT *”。11. 表名别名表名别名要简短,但意义要尽量明确。通常使用大写的表名作为别名,使用 AS 关键字指定表或字段的别名。12. 类型转换不要依赖任何隐式的数据类型转换,不要假定 T-SQL 会进行必要的转换。例如,把数字变量赋予字符值。相反,在为变量赋值或比较值之前,应使用适当的 CONVERT 函数使数据类型相匹配。13. 数值比较不要将空的变量值直接与比较运算符(符号)比较。如果变量可能为空,应使用 IS NULL 或 IS NOT NULL 进行比较,或者使用 ISNULL 函数。14. 排序决不要依赖 SELECT 语句会按任何特定顺序返回行,除非在 ORDER BY 子句中指定了顺序。通常,应将 ORDER BY 子句与 SELECT 语句一起使用。可预知的顺序(即使不是最方便的)比不可预知的顺序强,尤其是在开发或调试过程中。在返回行的顺序无关紧要的情况下,可以忽略 ORDER BY ,减少资源开销。15. Unicode字符串在Unicode字符前面使用N前缀,避免引起数据的不一致。示例:- Assumes the default code page is not GreekCREATE TABLE #t1 (c1 nchar(1)INSERT #t1 VALUES(N)INSERT #t1 VALUES()SELECT * FROM #t1输出结果:c1 - O16. BEGIN.END 块在SQL代码快中尽量使用BEGIN.END 语句块,提高代码可阅读性。17. TOP子句尽量使用TOP(变量)来减少SQL拼串现象。18. TRANSACTION编写只要在例程中使用多个数据库修改语句,包括在一个循环中多次执行一个语句,就应考虑声明显式事务。实例: BEGIN TRANSACTION Tran_1; UPDATE HumanResources.Employee SET Title = Title ,HireDate = HireDate ,CurrentFlag = CurrentFlag WHERE EmployeeID = EmployeeID; IF ERROR 0 BEGIN ROLLBACK TRANSACTION Tran_1; END COMMIT TRANSACTION Tran_1;19. 存储过程在编写存储过程时,使用PROCEDURE 代替 PROC 简写。示例:CREATE PROCEDURE dbo.存储过程名字五、 代码注释1. 代码头部注释在SQL代码块(sql文件或存储过程)的头部进行注释,标注创建人(Author)、创始日期(Create date)、修改信息(Modify n)。格式:- =- Author: - Create date: - Description: - Modify n: - =示例:- =- Author: Zhanghaifeng- Create dat

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论