【网学网提醒】:网学会员编辑为广大网友搜集整理了:SQLServer语法编写规范文档(SQL语句)V0.5绩等信息,祝愿广大网友取得需要的信息,参考学习。
【文档说明】:SQL语法编写没有标准的国际或厂家规范,与实际的客户和项目相关。本文档参考微软(中国)有限公司服务部实施项目中使用的编码规范,仅供参考。
1SQL对象命名规范
2SQL对象设计规范
2.1字段设计要求
1.2.3.4.5.6.7.日期类型使用Datetime,与数字相关的字段类型统一用numeric(M,N)格式。整数类型用int.用nvarchar类型.逻辑或标识的字段不用bit而用char(1)来表示方便编程和提高运算速度.图象字段采用Image类型.主键一般要无意义,没有特殊的需要不要用复合主键(如果是由几个表派生出来的关系数据表可以使用复合主键),可以采用sqlserver默认的自增加的ID字段做主键。
8.NotNull字段要加默认值。
2.2视图使用原则
1.2.3.视图字段名要尽量使用源表字段名,如果有重复,加上源表名作前缀。增删改等操作不要直接使用视图,要使用源表进行。如果系统对数据结构不需要保密,则只有对于复杂的、经常使用查询结果,才有必要使用视图。4.如果系统要求数据结构保密,可以大量使用视图。
2.3存储过程建立规则
1.2.3.存储过程要有异常处理部分,确保过程的可执行性。尽量在脚本加入设计思路的注释。尽量减少临时表的使用,如确实需要,可以考虑使用表变量替代。
2.4函数建立规则
1.函数要有异常处理部分,确保过程的可执行性。2.尽量在脚本加入设计思路的注释。
2.5触发器使用要求
1.2.尽量少使用触发器。如果有必要,则要综合考虑触发器的效率建立。有外键关联的表,尽量使用外键的update、delete属性替代触发器的功能。
3SQL语句编写规范
数据库开发阶段主要完成业务活动所必须的存储过程和触发器程序,Oracle使用使用PL/SQL,MicrosoftSQLServer使用T-SQL编写。
3.1代码书写规范
??????存储过程、触发器、自定函数书写宽度一般不要超过编辑区的可见范围(80字符左右);代码应按层次进行缩排书写,采用四空格缩进格式。将代码编辑器中制表键配置为使用空格填充,而不是使用制表符。SQL命令应根据命令长短调整命令语句中的关键字排列,使语句看起来结构清晰。SQL命令中的字段(列)与参数或表达式应合理安排书写位置,使对应关系看起来清晰明了。使用一个空行分隔T-SQL代码的逻辑块。水平列出的字段(或参数或表达式)之间的逗号前后要留有适量空格,字段列表过长时2
?????????
?????
???
????
?
?
从逗号后折到下一行书写,新行要缩进书写。
ANDOR逻辑表达式混合组合时要使用括号明确表明组合顺序。
SQLSERVERT-SQL命令词汇的大小写推荐采用Pascal格式。
CREATE创建对象命令推荐采用全大写,不能使用略写格式。
CREATE创建对象命令应明确指定所有者。
函数、过程中每个参数、变量的定义各占一行。
大写所有的SQL关键字,包括SQL函数。变量名称及光标名称使用混和大小写。数据类型使用小写。
当一个SQL语句中涉及到多个表时,始终使用表名别名来限定字段名,避免含义模糊的引用。别名使用大写。
sql脚本命名:
.sql,.sql
导出脚本命名:<系统名>.sql
3.2T-SQL编程约定
使用错误处理程序,必须使用SET或SELECT立即捕获错误代码。因为用来检查@@ERROR系统函数的T-SQL语句(IF)实际上在进程中清除了@@ERROR值,无法再捕获除零之外的任何值。避免使用“未声明的”功能,例如系统表中未声明的列、T-SQL语句中未声明的功能或者未声明的系统存储过程或扩展的存储过程。不要依赖任何隐式的数据类型转换。在为变量赋值或比较值之前,应使用适当的CONVERT函数使数据类型相匹配。不要将空的变量值直接与比较运算符(符号)比较。如果变量可能为空,应使用ISNULL或ISNOTNULL进行比较,或者使用ISNULL函数。不要使用STR函数进行舍入,此函数只能用于整数。如果需要十进制值的字符串形式,应先使用CONVERT函数(转至不同的范围)或ROUND函数,然后将其转换为字符串。也可以使用CEILING和FLOOR函数。使用数学公式时要小心,因为T-SQL可能会将表达式强制理解为一个不需要的数据类型。如果需要十进制结果,应在整数常量后加点和零(.0)。决不要依赖SELECT语句会按任何特定顺序返回行,除非在ORDERBY子句中指定了顺序。通常,应将ORDERBY子句与SELECT语句一起使用。可预知的顺序(即使不是最方便的)比不可预知的顺序强,尤其是在开发或调试过程中。(部署到生产环境中之前,可能需要删除ORDERBY子句。)在返回行的顺序无关紧要的情况下,可以忽略ORDERBY的开销。不要在T-SQL代码中使用双引号。应为字符常量使用单引号。如果没有必要限定对象名称,可以使用(非ANSISQL标准)括号将名称括起来。在SQLServer中,尽量使用表变量来代替临时表。如果表变量包含大量数据,请注意索引非常有限(只有主键索引)。先在例程中创建临时表,最后再显式删除临时表。将DDL与DML语句混合使用有助于处理额外的重新编译活动。要认识到临时表并不是不可使用,适当地使用它们可以使某些例程更有效,例如,当需要重复引用大型表或常用表中的某个数据集时。但是,对于一次性事件,最好使用导出表。使用表值UDF时要小心,因为在变量(而不是常量)中传递某个参数时,如果在WHERE子句中使用该参数,会导致表扫描。还要避免在一个查询中多次使用相同的表值UDF。但是,表值UDF确实具有某些非常方便的动态编译功能。几乎所有的存储过程都应在开始时设置SETNOCOUNTON,而在结束时设置SET3
???
?
NOCOUNTOFF。此标准同样适用于触发器。
只要在例程中使用多个数据库修改语句,包括在一个循环中多次执行一个语句,就应考虑声明显式事务。
使用基于光标的方法或临时表方法之前,应先寻找基于集的解决方案来解决问题。基于集的方法通常更有效。
与临时表一样,光标并不是不可使用。对小型数据集使用FAST_FORWARD光标通常要优于其他逐行处理方法,尤其是在必须引用几个表才能获得所需的数据时。在结果集中包括“合计”的例程通常要比使用光标执行的速度快。如果开发时间允许,基于光标的方法和基于集的方法都可以尝试一下,看哪一种方法的效果更好。
使用包含序号(从1到N)的表很方便。
4