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

下载本文档

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

文档简介

MSSQL脚本编码规范福州星网视易信息系统有限公司更新记录:版本作者日期内容1.0黄晨东2023.09.09SQL脚本编写规范2.0蔡炆炆2023.10.15基于1.0版本进行补充和整理ﻬ目录TOC\o"1-3"\h\z\uHYPERLINK\l"_Toc"Transact-SQL编程规范ﻩPAGEREF_Toc\h1HYPERLINK\l"_Toc"一、ﻩ概述ﻩPAGEREF_Toc\h1HYPERLINK\l"_Toc"1. 基本原则ﻩPAGEREF_Toc\h1HYPERLINK2. 基本规范ﻩPAGEREF_Toc\h1HYPERLINK\l"_Toc"二、ﻩ对象命名 PAGEREF_Toc\h1HYPERLINK\l"_Toc"1.ﻩ数据库 PAGEREF_Toc\h1HYPERLINK\l"_Toc"2. 数据库文献ﻩPAGEREF_Toc\h14.ﻩ数据视图 PAGEREF_Toc\h2HYPERLINK\l"_Toc"5. 数据列ﻩPAGEREF_Toc\h2HYPERLINK\l"_Toc"6.ﻩ存储过程 PAGEREF_Toc\h2HYPERLINK\l"_Toc"7.ﻩ函数 PAGEREF_Toc\h3HYPERLINK\l"_Toc"8.ﻩ用户定义数据类型ﻩPAGEREF_Toc\h3HYPERLINK\l"_Toc"9.ﻩ主键、索引 PAGEREF_Toc\h3HYPERLINK三、 参数命名ﻩPAGEREF_Toc\h3HYPERLINK\l"_Toc"1.ﻩ数据列参数 PAGEREF_Toc\h3HYPERLINK\l"_Toc"2. 非数据列参数 PAGEREF_Toc\h4HYPERLINK\l"_Toc"3.ﻩ常用字段命名 PAGEREF_Toc\h4HYPERLINK四、ﻩSQL编写ﻩPAGEREF_Toc\h4HYPERLINK\l"_Toc"1. 大小写ﻩPAGEREF_Toc\h4HYPERLINK\l"_Toc"2.ﻩ存储格式 PAGEREF_Toc\h4HYPERLINK\l"_Toc"3. 类型选择ﻩPAGEREF_Toc\h4HYPERLINK4. 默认值ﻩPAGEREF_Toc\h5HYPERLINK6. 使用“'”ﻩPAGEREF_Toc\h5HYPERLINK\l"_Toc"7. 语句缩进ﻩPAGEREF_Toc\h5HYPERLINK9.ﻩ语句分割ﻩPAGEREF_Toc\h5HYPERLINK\l"_Toc"10. 使用“*” PAGEREF_Toc\h5HYPERLINK\l"_Toc"11. 表名别名 PAGEREF_Toc\h5HYPERLINK13. 数值比较ﻩPAGEREF_Toc\h6HYPERLINK14.ﻩ排序 PAGEREF_Toc\h6HYPERLINK15.ﻩUnicode字符串 PAGEREF_Toc\h6HYPERLINK16. BEGIN...END块 PAGEREF_Toc\h6HYPERLINK\l"_Toc"17.ﻩTOP子句 PAGEREF_Toc\h618.ﻩTRANSACTION编写 PAGEREF_Toc\h6HYPERLINK2. TRANSACTION注释 PAGEREF_Toc\h7Transact-SQL编程规范概述本规范重要规定SQL脚本在书写过程中所应遵循的规则及注意事项。编写该规范的目的是使公司软件开发人员的源代码书写习惯保持一致。这样做可以使每一个成员都可以理解其它成员的代码,以便于源代码的二次开发记忆系统的维护。基本原则以大小写敏感编写SQL语句。

尽量使用Unicode数据类型。ﻫ优先使用连接代替子查询或嵌套查询。ﻫ尽量使用参数化SQL查询代替语句拼接SQL查询。ﻫ尽量使用存储过程代替SQL语句。严禁使用[拼音]+[英语]的方式来命名SQL对象或变量。ﻫ严禁使用触发器。ﻫ严禁在表间创建外键关系。严禁创建自增长主键列基本规范采用Pascal样式命名数据库对象。大写T-SQL语言的所有关键字,谓词和系统函数。Pascal大小写:组成标记符的每个单词的首字母大写,其余字母小写的书写约定。对于缩写的双字母单词,规定所有大写。例如:ApplicationException

ID对象命名数据库命名格式为[项目英文名称]。

示例:AdventureWorks数据库文献数据文献:[数据库名称]+_Data.mdfﻫ日记文献:[数据库名称]+_Log.ldfﻫ示例:AdventureWorks_Data.mdf

AdventureWorks_Log.ldf数据表命名格式为BL_TBL_+[表名]。

示例:BL_TBL_Employee

BL_TBL_Product

表名以英文单数命名。

示例:使用BL_TBL_Product而不是BL_TBL_Products数据视图命名格式为BL_V_+[视图名称]。

示例:BL_V_Employee

BL_V_SalesPerson数据列列名称命名采用英文单词或缩写,英文单词只来自于具体业务定义,尽量表达清楚含义。命名格式为[列名称]。ﻫ示例:AddressIDﻫ

PostalCodeﻫ尽量避免使用拼音命名,假如不可避免,对于比较短的列名,采用拼音全写,假如拼音列名比较复杂,可以采用首个字用全拼,其它字用首字母大写表达。

示例:宁波Ningbo

经营方式JingYFS存储过程命名格式为BL_HV_+[存储过程名称]。

示例:BL_HV_GetUserﻫ

BL_HV_AddUser每个过程必须要有两个输出参数@ErrorCode和@ErrorMessage。存储过程书写格式如下:ifexists(select1fromsysobjectswhereid=object_id(‘bl_hv_Checkout’))dropprocedurebl_hv_CheckoutgocreateprocedureCheckout(….@ErrorCodeintoutput,--返回错误代码0表达成功非0表达失败@ErrorMessagevarchar(100)output--返回错误信息)asdeclare@checkoutidint,--变量声明在此处…begin…endgo函数命名格式为BL_Fn_+[函数名]。

示例:BL_Fn_GetUser系统函数使用所有大写。ﻫ示例:SELECTISNULL(@LastName,'Unknownlastname');

GETDATE()用户定义数据类型命名格式为[自定义数据类型名称]。

示例: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_SalesPersonID

主XML索引:PXML_[表名称]_[Xml类型列名称]。

示例:PXML_Store_Demographics参数命名

数据列参数命名格式为@+[列名称]。

示例:@EmployeeIDﻫ在列名不符合Pascal样式时(初期遗留系统),例如使用所有大写的列名称,或使用“_”进行连接的字段名称,参数名称定义使用@+[列名称],这里的列名称尽量符合Pascal样式命名。非数据列参数在参数无法跟列名称进行关联时,使用可以反映该参数功能的英文单词或单词组合,采用Pascal样式命名。

示例:@ErrorIDﻫ

@Flag常用字段命名这里的常用字段是指在建表时频繁使用的表名或列名,下表对常用字段进行建议性定义,列名称数据类型说明CreatedDatedatetime纪录创建日期,一般使用GETDATE()自动生成ModifiedDatedatetime

纪录最后修改日期,初次使用GETDATE()DeletedDatedatetime记录删除(标记删除)日期StartDatedatetime开始日期EndDate

datetime结束日期StartTimedatetime开始时间EndTimedatetime结束时间ID

int

使用ID代替Id或idParentIDint父IDStatusint状态SQL编写大小写大写T-SQL语言的所有关键字,谓词和系统函数。变量名称及游标名称使用Pascal样式。数据类型定义使用所有小写。

示例:DECLARE@LastNamenvarchar(32);存储格式尽量采用Unicode数据存储格式,提高可移植性和兼容性,实际应用中尽量使用nchar、nvarchar、ntext代替char、varchar、text。类型选择假如字符具有明确的长度,使用nchar代替nvarchar;char代替varchar。在只有两个也许数值时,使用bit代替int或smallint。在SQLServer2023中,使用nvarchar(MAX)代替ntext;varchar(MAX)代替text;varbinary(MAX)代替image。在特殊的数据表结构中可考虑xml数据类型,达成事半工倍的效果。默认值在建立数据表时,尽量使用默认值代替NULL值。比如设立CreatedDate列默认值为GETDATE()。在可行的情况下设立字段为不允许空。字段长度始终指定字符数据类型的长度,并保证允许用户也许需要的最大字符数,避免超过最大长度时出现字符丢失现象。对于字符型数据,建议采用2的n次方来定义数据长度。示例:nvarchar(32)

varchar(64)使用“'”在T-SQL代码中为字符常量使用单引号,避免使用双引号。语句缩进一个嵌套代码块中的语句使用2个空格的缩进。语句换行建议SQL代码每行以关键字或“'”开头。示例:SELECT[ShiftID]

,[Name]

,[StartTime]

,[EndTime]

,[ModifiedDate]FROM[AdventureWorks].[HumanResources].[Shift]语句分割使用一个(而不是两个)空行分隔T-SQL代码的逻辑块。使用“*”尽量避免在任何代码中使用“SELECT*”。表名别名表名别名要简短,但意义要尽量明确。通常使用大写的表名作为别名,使用AS关键字指定表或字段的别名。类型转换不要依赖任何隐式的数据类型转换,不要假定T-SQL会进行必要的转换。例如,把数字变量赋予字符值。相反,在为变量赋值或比较值之前,应使用适当的CONVERT函数使数据类型相匹配。数值比较不要将空的变量值直接与比较运算符(符号)比较。假如变量也许为空,应使用ISNULL或ISNOTNULL进行比较,或者使用ISNULL函数。排序决不要依赖SELECT语句会按任何特定顺序返回行,除非在ORDERBY子句中指定了顺序。通常,应将ORDERBY子句与SELECT语句一起使用。可预知的顺序(即使不是最方便的)比不可预知的顺序强,特别是在开发或调试过程中。在返回行的顺序无关紧要的情况下,可以忽略ORDERBY,减少资源开销。Unicode字符串在Unicode字符前面使用N前缀,避免引起数据的不一致。示例:--AssumesthedefaultcodepageisnotGreekCREATETABLE#t1(c1nchar(1))INSERT#t1VALUES(N'Ω')INSERT#t1VALUES('Ω')SELECT*FROM#t1输出结果:c1

ΩOBEGIN...END块在SQL代码快中尽量使用BEGIN...END语句块,提高代码可阅读性。TOP子句尽量使用TOP(变量)来减少SQL拼串现象。TRANSACTION编写只要在例程中使用多个数据库修改语句,涉及在一个循环中多次执行一个语句,就应考虑声明显式事务。实例:

BEGINTRANSACTIONTran_1;

UPDATE[HumanResources].[Employee]

SET[Title]=@Title

,[HireDate]=@HireDate

,[CurrentFlag]=@CurrentFlag

WHERE[EmployeeID]=@EmployeeID;

IF@@ERROR>0

BEGIN

ROLLBACKTRANSACTIONTran_1;

END

COMMITTRANSACTIONTran_1;存储过程在编写存储过程时,使用PROCEDURE代替PROC简写。示例:CREATEPROCEDURE[dbo].[存储过程名字]代码注释代码头部

温馨提示

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

评论

0/150

提交评论