SQL代码编写指导规范

上传人:nu****n 文档编号:161861231 上传时间:2022-10-15 格式:DOC 页数:9 大小:93.51KB
收藏 版权申诉 举报 下载
SQL代码编写指导规范_第1页
第1页 / 共9页
SQL代码编写指导规范_第2页
第2页 / 共9页
SQL代码编写指导规范_第3页
第3页 / 共9页
资源描述:

《SQL代码编写指导规范》由会员分享,可在线阅读,更多相关《SQL代码编写指导规范(9页珍藏版)》请在装配图网上搜索。

1、项目:规范文号:COD-STA-03版本:V1.1编写者:许飞云时间:2005-11-4SQL代码编写指导规范版本变更说明:时间版本作者/修改人变更原因2005-11-4V1.0许飞云初版发布2007-3-5 V1.1刘莉添加5.4 约定规则目 录1 简介21.1 目标21.2 范围21.3 基本依据21.4 使用约定21.4.1 规则21.4.2 建议21.5 术语和缩略语21.6 参考32 通用规则33 配置约定34 格式约定35 命名约定45.1 一般规则45.2命名规则45.3 常用规则55.4 约定规则65.4.1 表名采用前缀+表名的方式,前缀定义如下:66 注释76.1 SQL代

2、码注释76.2 对象注释77 嵌入式代码81 简介开发小组在进行 SQL 编程时常常会忽略所谓的编码标准,但这些标准却是开发小组顺利开展工作的关键工具。这里介绍的编码标准是经整理出来的开发成果。它们当然还没有得到普遍接受,而且不可否认,有些标准带有主观色彩。整理出此规范实际上更多的是为了提高大家的意识,而不是吹捧每个人是 SQL 编写方面的仲裁者:最重要的是要建立某些合理的编码标准并遵循这些标准。您在这篇文章中会发现有关 SQL 编程的一系列不同的编码标准、技巧和提示。它们并未以任何特定的优先级或重要性顺序列出。1.1 目标本主题提供SQL编程语言的命名指南。希望能对下述情况有积极的作用: 避

3、免Errors/Bugs ,特别是难以查询的Errors/Bugs 规范不良的编码习惯 提高程序的可读性、可维护性和可移值性1.2 范围规范只针对 SQL Server数据库中的SQL编程语言。1.3 基本依据本文档主要依据一位具有超过 25 年经验的数据库管理员和应用程序开发员 Brian Walker 提出的开发成果。同时也可参考MSDN文档中相应的规范。1.4 使用约定 规则本文档表明没有特别的理由必须要遵守的要求。违反规则的编码人员必须至少同有经验的同事商量并取得违反规则的理由共识后才能实施。必须对违反规则的代码进行注解。 建议正常情况下优先考虑,如果有违反建议的编码,应该同有经验的同

4、事商量并取得违反建议的理由共识后才能实施,推荐对违反建议的代码进行注解。1.5 术语和缩略语如下表所示:术语全称含义部份命令备注SQLStructrued Query Language结构化查询语言如下DDLData Definition Language数据定义语言CREATE, ALTER, DROP, DECLAREDM LData Manipulation Language数据操纵语言SELECT, DELETE,UPDATE, INSERTDCLData Control Language数据控制语言GRANT, REVOKE,COMMIT, ROLLBACK1.6 参考MSDN-命名

5、指南Sql Server 2000 联机帮助2 通用规则规则1: 每一次不能执行建议的编码规则,必须要有合理的理由,理由不包括个人的编码风格因素。规则2: 在一个文件中不要混合不同所有者的代码,因为第三方的代码可能不会遵守相同的编码规范。3 配置约定为方便开发小组成员编写出高质量的SQL代码,需要开发小组各成员按照统一的标准配置适合快速、高效开发的使用环境。这里,将会列出一些较为适用的参数配置约定,需要开发小组成员统一执行该约定,见下表:序号项目推荐方案备注1SQL代码编辑工具查询分析器SQL Server 自带2缩进符使用4个空格字符需要配置编辑器说明: 可以使用Tab键进行缩进处理,建议在

6、配置选项中,将默认的制表符,更改为四个空格字符,这样不管用什么程序查看SQL代码,都能保证是一致的格式4 格式约定表面上,SQL 代码的格式似乎并不重要,但一致的格式可以使您的同事(不论是同一小组的成员还是更大范围的项目开发团队的成员)更轻松地浏览和理解您的SQL代码。为SQL 语句定义一个结构,遵循一目了然的结构将使您可以更轻松地查找和确认语句的不同部分。统一的格式还使您可以更轻松地在复杂的SQL 语句中增、删代码段,也使调试工作变得更容易。下面是 SELECT 语句的格式示例,来说明SQL代码中的部份适用的格式:SELECT C.Name, E.NameLast, E.NameFirst,

7、 E.Number, ISNULL(I.Description,NA) AS DescriptionFROM tblCompany AS CJOIN tblEmployee AS EON C.CompanyID = E.CompanyIDLEFT JOIN tblCoverage AS VON E.EmployeeID = V.EmployeeIDLEFT JOIN tblInsurance AS ION V.InsuranceID = I.InsuranceIDWHERE C.Name LIKE NameAND V.CreateDate CONVERT(smalldatetime,01/01

8、/2000)ORDER BY C.Name, E.NameLast, E.NameFirst, E.Number, ISNULL(I.Description,NA)SELECT Retain = ERROR, Rows = ROWCOUNTIF Status = 0 SET Status = Retain 在代码块中使用缩进、块、制表符(用四个空格代替的)和空格 一个嵌套代码块中的语句一般使用以四个空格的缩进为较好的原则 在同一语句中开始新行时,使 SQL 关键字左对齐 使用一个(而不是两个)空行分隔 SQL 代码的逻辑块,只要需要就可以使用 请在关键字、分隔符、操作符之间加入一空格 语句尽可

9、能要简捷 当对语句添加注释时,请在注释符与注释之前,额外加上一空格5 命名约定5.1 一般规则规则1: 使用 US-English 作为命名标识符依据。规则2: 使用命名标识符的 Pascal 大小写、Camel 大小写。5.2 命名规则由于不同的开发语言都有各自的格式约定,因此,对于SQL代码而言,在命名方面制定一些大家都比较熟悉或是习惯使用的标准是很有必要的。序号项目关键字命名规则前缀示例备注1表TABLEPascal无CompanyInfo2存储过程PROCEDURECamelspspDeleteUserStored Procedure3函数FUNCTIONCamelfnfnGetVer

10、sionFunction4触发器TRIGGERCamel无updEmployeeData一般不带上trigger对应的缩写5视图VIEWCamelvvUserCompany通常使用表名组合6索引INDEXCamelidxidxEmployeeID7游标CURSORPascal无EmployeeCursor8数据库DatabasePascaldbECTMS但一般不带前缀的5.3 常用规则现列出在书写SQL代码时所使用到的一些常用规则: 创建表时,建议使用自增序号(从 1 到 N)列,在使用包含序号的表时会很方便 对于SQL代码中的关键字,建议全部使用大写格式,包括用于DDL、DML和DCL等SQ

11、L代码中。如:CREATE PROCEDURE 变量名称及光标名称使用混和大小写,即单词首字母大写,单词剩下的全小写 数据类型使用小写 表名别名要简短,但意义要尽量明确。通常,使用大写的表名作为别名,使用 AS 关键字指定表或字段的别名。 当一个 SQL 语句中涉及到多个表时,始终使用别名来限定字段名。这使其他人阅读起来更清楚,避免了含义模糊的引用 当相关数字出现在连续的代码行中时(例如一系列 SUBSTRING 函数调用),将它们排成列 声明 SQL 局部变量(例如 lngTableID)时,使用适当的数据类型声明和一致的大写 始终指定字符数据类型的长度,并确保允许用户可能需要的最大字符数,

12、因为超出最大长度的字符会丢失 始终指定十进制数据类型的精度和范围,否则,将默认为未指定精度和整数范围 在尽可能出错的SQL语句中,使用错误处理程序,且必须使用 SET 或 SELECT 立即捕获错误代码(ERROR)以保存至特定的变量中 避免使用“未声明的”功能,例如系统表中未声明的列、SQL 语句中未声明的功能或者未声明的系统存储过程或扩展的存储过程 不要依赖任何隐式的数据类型转换。例如,不能为数字变量赋予字符值,而假定 SQL 会进行必要的转换。相反,在为变量赋值或比较值之前,应使用适当的 CONVERT 函数使数据类型相匹配。另一个示例:虽然 SQL 会在进行比较之前对字符表达式进行隐式

13、且自动的 RTRIM,但不能依赖此行为,因为兼容性级别设置非字符表达式会使情况复杂化 不要将空的变量值直接与比较运算符(符号)比较 对于变量的值与空值比较,应使用 IS NULL 或 IS NOT NULL,或者使用 ISNULL 函数 不要使用 STR 函数进行舍入,此函数只能用于整数。如果需要十进制值的字符串形式,应先使用 CONVERT 函数(转至不同的范围)或 ROUND 函数,然后将其转换为字符串。也可以使用 CEILING 和 FLOOR 函数 使用数学公式时要小心,因为 SQL 可能会将表达式强制理解为一个不需要的数据类型。如果需要十进制结果,应在整数常量后加点和零 (.0) 决

14、不要依赖 SELECT 语句会按任何特定顺序返回行,除非在 ORDER BY 子句中指定了顺序 通常,应将 ORDER BY 子句与 SELECT 语句一起使用。可预知的顺序(即使不是最方便的)比不可预知的顺序强,尤其是在开发或调试过程中 不要在 T-SQL 代码中使用双引号。应为字符常量使用单引号 在 SQL Server 2000 中,尽量使用表变量来代替临时表。如果表变量包含大量数据,请注意索引非常有限(只有主键索引) 先在例程中创建临时表,最后再显式删除临时表。将 DDL 与 DML 语句混合使用有助于处理额外的重新编译活动 要认识到临时表并不是不可使用,适当地使用它们可以使某些例程更

15、有效,例如,当需要重复引用大型表或常用表中的某个数据集时。但是,对于一次性事件,最好使用导出表 几乎所有的存储过程(或触发器)都应在开始时设置 SET NOCOUNT ON,而在结束时设置 SET NOCOUNT OFF,可以避免SQL Server在执行存储过程的每个语句后向客户端发送 DONE_IN_PROC 消息 要在例程中使用多个数据表/库修改语句,包括在一个循环中多次执行一个语句,就应考虑声明显式事务 使用基于光标的方法或临时表方法之前,应先寻找基于集的解决方案来解决问题。基于集的方法通常更有效 理解 CROSS JOIN 的工作原理并加以利用。例如,您可以在工作数据表和序号表之间有

16、效地使用 CROSS JOIN,结果集中将包含每个工作数据与序号组合的记录 为了提高性能,应优先使用连接,然后使用子查询或嵌套查询 尽可能将临时对象放置在本地 检查输入参数的有效性 只使用在存储过程中创建的临时表 优先使用 SELECT.INTO,然后使用 INSERT.SELECT,以避免大量死锁 不要在任何代码中使用 SELECT * 建议养成良好的编写习惯,在语句结束后,加上SQL语句结束符:分号(;)5.4 约定规则 表名采用前缀+表名的方式,前缀定义如下: 前缀统一3位字符长度。 前缀第一位字符大写,其余2位小写。 公共模块数据库命名采用首单词的首3字母。 子系统采用前3个单词命名,

17、每个单词取首字母,详细命名见下表:系统名称表结构前缀类别说明系统维护Sys公共基础模块System Data基础资料代码Bas公共基础模块Basic Data商务/财务管理Fbs子系统Finance Balance system客户关系管理Crm子系统Customer Relation Management仓库管理系统Wms子系统Warehouse Management System运输管理系统Tms子系统Transport Management System货代管理系统Fms子系统Forwarder Management System配送管理系统Dms子系统Distribution Mana

18、gement System集装箱堆场管理系统Cds子系统Container Depot System集装箱维修系统Crs子系统Container Repairing System报关管理系统Cos子系统Customs Operation System码头管理系统Tos子系统Terminal Operation System临时表TemTemp table6 注释本节说明了添加注释的一些约定。对部份对象应尽可能添加上较详细的说明性内容,即注释,这是在编写任何代码时都需要时常考虑的一件事情。所以请用一定的时间为每一个存储过程、触发器、视图等附上一段必要的注释,方便维护。SQL代码中使用的注释标记符

19、有: 行注释法:使用两个连字符 - 块注释法:由此符号对组成 /*和*/6.1 SQL代码注释开发小组的所有成员,一定要重视对对SQL代码添加有效的注释。给某语句行或是特定功能的语句块添加上详尽的注释,将方面以后维护时阅读。因此,对于单独的一行SQL代码,有时是很有必要添加上注释的,此时便可以采用行注法。然而对于某一实现特定功能或是某一逻辑块上的SQL代码块,则也可以采用块注释法,将会更加清晰的表达清楚代码含义。6.2 对象注释主要是针对编写的存储过程、触发器加上注释,这里采用语句块式的注释格式。一般情况下,要注明以下信息: 对象名称、作者、创建时间、功能描述、返回结果、调试用例、修改记录。因

20、此,建议采用以下格式,在刚创建对象时,就加上详细的注释:/*Name: 对象名字Author: 创建作者Date: 编写时间Description: 说明本存储过程所有实现的具休功能ReturnValue: 是否有返回值,以及返回的对象说明Debug: 如果方便的话,建议提供执行SQL语句的命令形式History: 详细记录每次修改该对象功能时的一些信息诸如:修改人、时间、修改的原因及解决的问题*/7 嵌入式代码这里的嵌入式代码是指,将写的标准SQL代码,包括代码段、存储过程、视图等,作为一字符串常量写入到宿主语言(如C#、Delphi)中。对此,开发人员在编写时,SQL代码需要遵循本文档中的指导性建议,同时还要遵循宿主语言的编程规范。示例:string strGetUser = SELECT UserName, Password FROM UserInfo WHERE UserName = UserName AND Password = Password;

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!