SQL SERVER数据库脚本开发规范
- 格式:pdf
- 大小:246.41 KB
- 文档页数:12
数据库开发规范(SQL_SERVER篇)数据库开发规范(SQL SERVER篇)目录第一章命名规范 (4)1.命名标志法 (4)2.数据库命名 (4)3.数据库月份库、数据表日分库命名规则 (4)4.分段数据库分库命名规则 (4)5.分段分日期数据库分库命名规则 (4)6.表的命名 (5)7.字段命名 (5)8.存储过程命名 (5)9.触发器命名, (6)10.索引命名 (6)11.主键 (6)12.外键 (6)13.缺省值 (6)15.函数的命名 (6)16.其他数据库对象命名规则 (6)17.其他数据库可编程性对象命名 (6)18.数据库保留字 (6)19.禁止使用空格 (6)第二章常用数据类型 (7)第三章数据库设计规范 (9)1.三范式 (9)2.适当的冗余 (9)3.主键 (9)4.索引 (9)5.主键与聚集索引的关系 (10)第四章存储过程编写规范 (11)1.注释 (11)2.书写规范 (12)3.性能相关 (12)4.尽量使用索引 (13)5.事务和锁 (14)6.其他注意事项 (14)7.注意临时表和表变量的用法 (14)8.注意子查询的用法 (14)9.常用写法 (16)9.1. XML解析 (16)9.2.检查表是否有数据 (16)9.3.检查变量是否为空或为’’ (16)9.4.动态SQL (16)9.5.建表 (17)9.6.建索引 (17)9.7.建用户 (17)9.8.建全文索引 (17)9.9.建链接服务器 (18)9.10. SERVICE BROKER (18)9.11.分区 (19)第一章命名规范1. 命名标志法使用下面的三种大写标识符约定。
Pascal 大小写将标识符的首字母和后面连接的每个单词的首字母都大写。
可以对三字符或更多字符的标识符使用Pascal 大小写。
例如:BackColorCamel 大小写标识符的首字母小写,而每个后面连接的单词的首字母都大写。
sqlserver编程语言SQL Server 是一个关系数据库管理系统,它使用一种称为Transact-SQL (T-SQL) 的语言进行编程。
T-SQL 是 SQL 的一个扩展,它提供了额外的功能和语法,使开发人员能够执行更复杂的数据操作和业务逻辑。
以下是 T-SQL 的主要功能和特性:1.数据定义语言 (DDL):T-SQL 提供了一系列命令,如 `CREATE`, `ALTER`, 和 `DROP`,用于定义和管理数据库对象,如表、索引、存储过程等。
2.数据操纵语言 (DML):T-SQL 提供了如 `INSERT`, `UPDATE`, `DELETE` 等命令,用于插入、更新、删除数据。
3.事务处理:T-SQL 支持事务处理,使你可以在单一的逻辑操作中执行多个数据库操作。
4.存储过程和函数:T-SQL 支持创建存储过程和函数,这允许你将常用的或复杂的逻辑封装在数据库中。
5.触发器:T-SQL 支持创建触发器,这是一个响应数据库表上的特定事件(如插入、更新或删除)自动执行的特殊类型的存储过程。
6.游标:游标允许你遍历查询结果集中的行。
7.动态 SQL:你可以使用 T-SQL 创建和执行动态 SQL 查询。
8.SQL Server 对象变量:这允许你在 T-SQL 代码中引用数据库对象,如表或列。
9.控制流语句:T-SQL 支持条件语句(如 `IF` 和 `CASE`)、循环(如 `WHILE` 和 `CURSOR`)等控制流结构。
10.错误处理:T-SQL 支持错误处理,允许你捕获和处理运行时错误。
T-SQL 是与 SQL Server 交互的主要方式,它使开发人员能够编写复杂的查询、存储过程和触发器,以执行各种数据库任务和操作。
sql规范SQL(Structured Query Language)是一种用于管理关系数据库的计算机语言。
虽然SQL是一种标准的语言,但是在实际应用中,不同的数据库管理系统可能会有一些差异。
为了提高代码的可读性和可维护性,制定了一些SQL规范。
下面是一个涵盖了SQL规范的大致指南,旨在帮助开发人员编写高质量的SQL代码。
1. 格式化代码:- 使用统一的缩进,通常是4个空格。
- 在代码中适当空格,使代码更易读。
- 使用大写字母或小写字母编写关键词,以提高可读性。
2. 使用明确的表别名:- 在SQL查询中,如果涉及多个表,为每个表使用明确的别名。
- 别名应该具有描述性,以便更好地理解查询意图。
3. 使用JOIN语句:- 避免使用传统的WHERE语句来连接表,而是使用JOIN语句。
- JOIN语句可以更清晰、更有效地表示表之间的关系。
4. 避免使用SELECT *:- 在查询中,尽可能明确地列出需要的列,而不是使用通配符*。
- 这样可以减少数据传输量,提高查询效率,并且使查询意图更加明确。
5. 避免使用子查询:- 子查询会增加查询的复杂性和执行时间。
- 尽量使用JOIN语句来代替子查询,以提高查询性能。
6. 使用合适的数据类型:- 在创建表时,选择适当的数据类型和长度。
- 这样可以减少存储空间的使用,并提高查询性能。
7. 对于NULL值的处理:- 在查询中,使用IS NULL或IS NOT NULL来测试NULL 值,而不是使用等号(=)。
- 这样可以更明确地表示查询的意图,并且使代码更易读。
8. 使用事务:- 当执行多个SQL操作时,将它们放在一个事务中。
- 这样可以确保数据的一致性,并提供可靠的回滚机制。
9. 编写注释:- 在代码中加入注释,解释SQL的意图和目的。
- 这样可以让其他开发人员更容易理解代码,并且在维护代码时更加方便。
10. 安全性考虑:- 在查询中,避免将用户输入直接插入SQL查询中,以免遭受SQL注入攻击。
SQL Server中创建规则规则(Rule)就是数据库中对存储在表的列或用户自定义数据类型中的值的规定和限制。
规则是单独存储的独立的数据库对象。
规则与其作用的表或用户自定义数据类型是相互独立的,即表或用户自定义对象的删除、修改不会对与之相连的规则产生影响。
规则和约束可以同时使用,表的列可以有一个规则及多个CHECK 约束。
规则与CHECK 约束很相似,相比之下,使用在ALTERTABLE 或CREATE TABLE 命令中的CHECK 约束是更标准的限制列值的方法,但CHECK 约束不能直接作用于用户自定义数据类型。
1 创建规则(1)用CREATE RULE 命令创建规则CREATE RULE 命令用于在当前数据库中创建规则,其语法如下:CREATE RULE rule_name AS condition_expression其中condition_expression 子句是规则的定义。
condition_expression 子句可以是能用于WHERE 条件子句中的任何表达式,它可以包含算术运算符、关系运算符和谓词(如IN、LIKE、BETWEEN 等)。
注意:condition_expression子句中的表达式必须以字符“@”开头。
(2)用Enterprise Manager 创建规则在Enterprise Manager 中选择数据库对象“Rules”,单击右键从快捷菜单中选择“NewRule”选项,即会弹出如图9-1 所示的创建规则属性对话框。
输入规则名称和表达式之后,单击“确定”按钮,即完成规则的创建。
2 查看规则(1)用Enterprise Manager 查看规则在Enterprise Manager 中选择“Rules” 对象,即可从右边的任务板中看到规则的大部分信息,包括规则的名称、所有者、创建时间,等如图9-2 所示。
在SQL Server 2000 中不像7.0 版本可以直接在任务板中看到规则的表达式,这需要查看规则的属性。
SQL Server存储过程是一种预先编译的SQL语句集,存储在数据库中,可以通过存储过程的名称和参数来调用。
存储过程的编写可以大大提高数据库的性能和安全性,同时也可以简化复杂的数据库操作。
下面将从存储过程的基本语法、参数传递、错误处理、性能优化等方面来介绍SQL Server存储过程的编写。
一、存储过程的基本语法1.1 创建存储过程在SQL Server中,可以使用CREATE PROCEDURE语句来创建存储过程,例如:```sqlCREATE PROCEDURE proc_nameASBEGIN-- 存储过程的逻辑代码END```1.2 存储过程的参数存储过程可以接受输入参数和输出参数,例如:```sqlCREATE PROCEDURE proc_nameparam1 INT,param2 VARCHAR(50) OUTPUTASBEGIN-- 存储过程的逻辑代码END```1.3 调用存储过程使用EXECUTE语句可以调用存储过程,例如:```sqlEXECUTE proc_name param1, param2 OUTPUT```二、参数传递2.1 输入参数输入参数用于向存储过程传递数值、字符等数据,可以在存储过程内部进行计算和逻辑操作。
2.2 输出参数输出参数用于从存储过程内部传递数据到外部,通常用于返回存储过程的计算结果或状态信息。
2.3 默认参数在创建存储过程时可以指定默认参数值,当调用存储过程时如果未传入参数,则使用默认值。
三、错误处理3.1 TRY...CATCH语句使用TRY...CATCH语句可以捕获存储过程中的异常并进行处理,例如:```sqlBEGIN TRY-- 存储过程的逻辑代码END TRYBEGIN CATCH-- 异常处理代码END CATCH```3.2 R本人SEERROR函数可以使用R本人SEERROR函数来抛出自定义的异常信息,例如: ```sqlR本人SEERROR('Custom error message', 16, 1)```四、性能优化4.1 索引优化在存储过程中执行的SQL语句涉及到大量数据查询时,可以使用索引来提升查询性能。
文件制修订记录目录1前言 (3)1.1目的 (3)1.2术语 (3)1.3参考文献 (3)2逻辑对象的命名规范 (3)2.1数据库命名 (3)2.2数据库文件及目录 (3)2.3表 (3)2.4字段/域 (4)2.5索引 (4)2.6视图 (4)2.7存储过程 (4)2.8触发器 (4)2.9函数 (4)3可编程性编码规范 (4)3.1可编程性统一规范 (4)3.1.1外部参数 (4)3.1.2内部参数 (5)3.1.3代码编写格式规范 (5)3.2存储过程 (5)3.2.1存储过程格式: (6)3.2.2存储过程标头备注 (6)3.2.3返回值 (6)3.3函数 (6)3.3.1函数格式 (7)3.3.2函数标头备注 (7)3.4触发器 (7)3.4.1触发器格式 (7)3.4.2触发器标头备注 (8)4数据库编程技巧 (8)1前言1.1目的为了统一公司软件开发的设计过程中关于数据库SQL SEREVR设计时的命名规范和具体工作时的编程规范,便于交流和维护,特此收集、整理公司已经积累的技术资料、参考国家规范和标准、修订和编制了本编程规范。
1.2术语暂无。
1.3参考文献版本说明和修改历史2逻辑对象的命名规范2.1数据库命名数据库的命名要求使用与数据库意义相关联的拼音首字母且以“XY”打头,例如:客户资料数据库的命名可以是XYKhzl。
2.2数据库文件及目录数据库文件存放路径:d:\xydata数据库主数据文件命名:DBName_Data_XX.mdf,文件组名称:PRIMARY数据库事务日志文件命名:DBName_log_XX.ldf数据库文件组命名:主文件组 PRIMARY,次文件组 DBName_FileGroup_XX其中:DBName为数据库实际名称XX为从00开始的数字编号2.3表表的命名以业务品种为第一前缀,加下划线(_),业务模块为第二个前缀,其后紧接与表意义相关联的除系统管理库中表的命名可不用业务品种为第一前缀外,其他库中必须使用第一前缀。
sqlserver数据库创建规则的语句SQL Server是一种常见的关系型数据库管理系统,其中包含了创建数据库的规则和语句。
下面将详细讨论如何使用SQL Server创建数据库。
首先,让我们明确一些基本概念。
在SQL Server中,数据库是一个用于存储和组织数据的容器。
数据库由表、视图、存储过程、函数和触发器等对象组成。
创建数据库需要指定数据库的名称、大小和一些其他可选参数。
现在我们将详细讨论SQL Server的数据库创建规则和语句。
第一步是确定数据库的名称。
在SQL Server中,数据库名称必须是唯一的,并且遵循一些命名规则。
数据库名称必须以字母开头,并且可以包含字母、数字和下划线。
长度不能超过128个字符。
例如,我们可以选择将数据库命名为"[MyDatabase]"。
第二步是确定数据库的大小。
在SQL Server中,数据库的大小是通过指定初始大小和自动增长选项来定义的。
初始大小表示数据库的初始大小,而自动增长选项定义了数据库在达到特定大小时的自动增长方式。
例如,我们可以选择将数据库的初始大小设置为100MB,并设置自动增长选项为每次增长50MB。
第三步是选择数据库的文件位置。
在SQL Server中,数据库文件由数据文件(.mdf)和日志文件(.ldf)组成。
数据文件用于存储数据库中的数据,而日志文件用于记录对数据库的更改。
可以选择将这两个文件放在同一个物理位置,也可以将它们放在不同的物理位置。
可以使用以下语句来指定文件的位置:CREATE DATABASE [MyDatabase]ON PRIMARY( NAME = N'MyDatabase', FILENAME =N'C:\Data\MyDatabase.mdf' )LOG ON( NAME = N'MyDatabase_log', FILENAME =N'C:\Data\MyDatabase_log.ldf' )上面的语句将数据库的数据文件放在"C:\Data\MyDatabase.mdf",将日志文件放在"C:\Data\MyDatabase_log.ldf"。
sql脚本编写教程SQL(Structured Query Language)是一种用于管理关系型数据库的编程语言。
它允许用户执行各种操作,包括创建、查询、插入、更新和删除数据。
SQL脚本是包含一系列SQL语句的文件,用于执行数据库操作。
本教程将指导你如何编写SQL脚本,并提供一些常用的SQL 语句示例。
1. 创建表在SQL中,使用CREATE TABLE语句可以创建表。
语法如下:CREATE TABLE table_name (column1 datatype,column2 datatype,...);例如,创建一个名为"students"的表,它包含id、name和age 列,可以使用以下语句:CREATE TABLE students (id INT,name VARCHAR(50),age INT);2. 插入数据使用INSERT INTO语句可以向表中插入数据。
语法如下:INSERT INTO table_name (column1, column2, ...) VALUES (value1, value2, ...);例如,插入一条学生数据可以使用以下语句:INSERT INTO students (id, name, age)VALUES (1, 'John', 20);3. 查询数据使用SELECT语句可以从表中查询数据。
语法如下:SELECT column1, column2, ...FROM table_nameWHERE condition;例如,查询所有学生的姓名和年龄可以使用以下语句:SELECT name, ageFROM students;4. 更新数据使用UPDATE语句可以更新表中的数据。
语法如下:UPDATE table_nameSET column1 = value1, column2 = value2, ...WHERE condition;例如,将id为1的学生年龄更新为22可以使用以下语句:UPDATE studentsSET age = 22WHERE id = 1;5. 删除数据使用DELETE FROM语句可以删除表中的数据。
sql,server,2008,计算列规范篇一:SQL Server 2008 T-SQL语句总结SQL Server 2008中T-SQL语句操作总结---【创建数据库】---(1)一个数据文件、一个日志文件create database db1on(name=RShDB_Data, ----数据库文件的逻辑名称filename='D:\RShDB_Data.mdf', ------数据库文件的物理名称(带路径)size=10MB, -----初始大小maxsize=30MB,------最大大小filegrowth=5MB -----自增长大小)log on(name=RShDB_Log,filename='D:\RShDB_Log.ldf', size=3MB,maxsize=12MB,filegrowth=2MB)(2)多个数据文件、多个日志文件create database studentson primary(name=students_data1,filename='D:\students_data1.mdf', size=5MB,maxsize=unlimited),(name=students_data2,filename='D:\students_data2.ndf', size=5MB,maxsize=20MB,filegrowth=2MB)log on(name=students_log1,filename='D:\students_log1.ldf', size=2MB,maxsize=6MB,filegrowth=10%),(name=students_log2,filename='D:\students_log2.ldf', size=3MB,maxsize=8MB,filegrowth=1MB)(3)创建具有文件组的数据库create database saleson primary(name=spri1_dat,filename='D:\spri1_dat.mdf', size=10,maxsize=50,filegrowth=10%),(name=spri2_dat,filename='D:\spri2_dat.ndf', size=10,maxsize=50,filegrowth=15%),filegroup salesGroup1(name=SGrp1Fil_dat,filename='D:\SGrp1Fil_dat.ndf', size=10,maxsize=50,filegrowth=5),(name=SGrp1Fi2_dat,filename='D:\SGrp1Fi2_dat.ndf', size=10,maxsize=50,filegrowth=5),filegroup salesGroup2(name=SGrp2Fi1_dat,filename='D:\SGrp2Fi1_dat.ndf', size=10,maxsize=50,filegrowth=5),(name=SGrp2Fi2_dat,filename='D:\SGrp2Fi2_dat.ndf', size=10,maxsize=50,filegrowth=5)log on(name=sales_log,filename='D:\sales_log.ldf',size=5,maxsize=25,filegrowth=5)总结:(i)先创建数据库文件,再创建日志文件,两者之间不需要逗号隔开,因为日志文件的创建是以log on开头,但是多个数据库文件(包括文件组)或在多个日志文件之间要用逗号隔开,(ii)create database语句中列出的第一个数据库文件将成为主要数据库文件,后缀名是mdf,其他的数据库文件均为次数据库文件,后缀名为ndf;日志文件的后缀名为ldf (iii)在指定涉及大小的参数时(如size\maxsize\filegrowth)要注意的几点:单位:如果没有指定单位只是给出数字的话,那么默认单位就为MB,比较特殊的filegrowth还可以是百分数,表示增长按发生增长时文件大小的百分比增长,总之大小不能超过maxsize就行;取值:(1)filegrowth=0说明不允许自增长;若没有指定filegrowth,那么对于数据文件来说默认都是1MB,而对于日志文件来说默认增长比例是10%,最小值为64KB;(2)maxsize不指定的话默认表示大小无限制,文件可以一直增大,直到磁盘空间满;maxsize=unlimited表示不限制增长,但这个是相对的,对于数据文件最大大小为16TB,对于日志文件最大大小为2TB;(3)size如果是在主数据库文件中未指定,那么默认使用model数据库中主数据库文件的大小,即使指定了那也不能小于model数据库中主数据库文件的大小,而在次数据库文件和日志文件中默认为1MB(4)size\maxsize都要是整数不能是小数---【修改数据库】---(1)扩大数据库空间(之前创建数据库时没有设置自增长,那么时间久了会出现这样的情况)方法一:扩大已有的数据文件或日志文件alter database studentsmodify file(name=students_data1,size=8MB)实现了对数据库students下的主数据文件students_data1由原来的5MB增大到现在的8MB的过程方法二:为数据库添加新的数据文件或日志文件alter database studentsadd file(name=students_data3,filename='D:\students_data3_ndf',size=6MB,filegrowth=0)alter database studentsadd log file(name=students_log3,filename='D:\students_log3.ldf',size=3MB,maxsize=8MB,filegrowth=1MB)篇二:SQL Server 2008中使用稀疏列和列集的方法SQL Server 2008中使用稀疏列和列集的方法如果你为INSERT 语句写了相同的触发器,那么你将看到INSERT操作出现相同的行为。
SQL Server基本语法一、SQL Server简介在开始讨论SQL Server基本语法之前,我们先简要介绍一下SQL Server。
SQL Server是由Microsoft开发的关系型数据库管理系统(RDBMS),它是一种可靠、高效且安全的数据库解决方案。
SQL Server支持广泛的企业级应用,并提供了强大的数据管理和查询功能。
二、SQL Server安装在使用SQL Server之前,我们需要先进行安装和配置。
以下是SQL Server安装的一般步骤:1.下载SQL Server安装包,并运行安装程序。
2.选择安装类型(如开发人员、评估版或正式版)。
3.设置安装规则,包括实例名称、安装路径等。
4.配置身份验证方式,可以选择Windows身份验证或SQL Server身份验证。
5.选择要安装的组件,如数据库引擎、分析服务等。
6.进行一些其他配置,如临时数据库路径、自动维护计划等。
7.等待安装完成,并根据需要安装补丁和更新。
三、SQL Server连接安装完成后,我们可以使用SQL Server Management Studio(SSMS)来连接和管理数据库。
以下是连接SQL Server的基本步骤:1.打开SQL Server Management Studio。
2.在连接对话框中输入服务器名称和身份验证方式。
3.如果选择Windows身份验证,直接输入Windows账户信息即可。
4.如果选择SQL Server身份验证,输入用户名和密码。
5.点击“连接”按钮,成功连接到SQL Server。
四、SQL语句基础SQL Server支持使用SQL语句来管理数据库和执行查询操作。
以下是一些常用的SQL语句:1. 创建数据库CREATE DATABASE database_name;使用CREATE DATABASE语句可以创建一个新的数据库,需要指定数据库名称。
2. 创建表CREATE TABLE table_name (column1 datatype,column2 datatype,...);使用CREATE TABLE语句可以创建一个新的表,需要指定表名称和列及其数据类型。
SQL SERVER数据库脚本开发规范修订历史记录版本改版日期改版说明*作者备注V0.92010-8-17C创建稿Simon ChengV1.02010-8-31A追加何根华V1.02010-8-31A追加王永庚注:改版说明中填写C-创建,A-追加,M-修改,D-删除,R-评审目录一、命名规范 (4)1)命名标志法 (4)2)一组相关表的命名 (4)3)存储过程命名 (4)4)禁止使用触发器命名, (4)5)索引命名 (4)6)主键 (4)7)外键 (4)8)引用字段命名 (4)9)缺省值 (4)10)禁止使用空格 (4)11)数据库保留字 (4)二、书写格式 (5)1)SELECT语句 (5)2)数据库对象引用 (5)3)不要拼SQL语句 (5)4)明确写出关联方式(不要用旧的书写方式) (5)5)SQL语句缩进方式 (5)6)SQL保留字要大写 (6)7)不使用系统前缀 (6)8)注释的重要性,注释是必须的 (6)10)注释的格式 (6)11)过多使用GOTO语句会使得代码可读性降低 (6)三、性能相关 (6)1)尽量用主键 (6)2)尽量避免使用游标Cursors (6)3)SET NOCOUNT ON语句 (7)4)模糊查询Like语句 (7)5)禁止在Where子句关联字段上使用函数 (7)6)Filtered Index可以提高查询性能 (7)7)尽量不用临时表 (7)8)WHERE子句中不用“不等于号” (8)9)及时检查global变量@@ERROR (8)10)Declare语句 (8)11)SET语句 (8)12)尽可能不使用Cross Join (8)13)尽可能不使用集合返回 (8)14)数据用多少抓多少 (8)15)视图使用 (8)16)尽可能不使用NText,Text,Image类型的字段 (8)17)静态SQL语句 (9)18)查询结果中尽可能减少Null值的出现 (9)19)Output Param参数与DataSet (9)20)有效的Indexes是提高数据性能的最好办法 (9)21)SQL语句的性能需要检查 (9)四、索引相关 (9)1)原则上每个表必须建立一个主键和一个聚集索引 (9)2)聚集索引 (9)3)索引不是越多越好 (9)4)索引经常建立的字段 (9)5)不建议使用Distinct (9)6)覆盖索引 (9)五、死锁相关 (10)1)使用NOLOCK提示查询优化器 (10)2)访问相关的Tables循序宜相同 (10)3)Transaction Scope尽可能短 (10)4)在Transaction Scope中涉及到数据修改量,尽可能小 (10)5)尽可能低的设置锁,以及隔离的级别 (10)六、其他约束 (10)1)每个表都应该有主键字段 (10)2)有Default Value限制的字段不允许设置为可以为空(Nullable) (10)3)在相关表存在的DataBase下创建存储过程和函数 (10)4)SQL归档文件格式 (10)5)Constraint创建级别 (11)6)带INSERT的SELECT语句 (11)一、命名规范1)命名标志法用Pascal标志法,给数据库对象命名,Tables,Views,Store Procedures。
例如:Contracts;ContactPhones2)一组相关表的命名如果有一组相关的表,需要加前缀。
以下划线“_”分割。
例如:Products_USAProducts_IndiaProducts_Mexico3)存储过程命名[GroupName_]<Action><BizName>。
这里的Action如:Get,Delete,Update,Write,Archive,Erase等动词。
例如:ARP_GetStockProcess;GetOrgUsers注:GroupName见附件4)禁止使用触发器命名,5)索引命名IX_<TableName>_<Columns Separated By_>。
例如:IX_UserDetails_UserID。
6)主键PK_<TableName>。
7)外键FK_<TableName1>_<TableName2>。
例如:FK_UserDetails_Emails。
8)引用字段命名一个表如有引用字段,指有外键的列,该字段名格式为:<ReferedTableName>ID;9)缺省值DF_<TableName>_<Column Name>。
例如:DF_UserDetails_UserName。
10)禁止使用空格在数据库对象命名时,禁止使用空格。
11)数据库保留字不要使用数据库保留字,给数据对象命名;12)视图的命名用Pascal标志法,和表一致;13)字段的命名用Pascal标志法,单词中间不用下划线二、书写格式1)SELECT语句不要在SELECT语句后面用星号*,表名前需要加Owner(dbo)。
在SELECT语句后面写明需要的列名。
例如:SELECT MainDeptId,PowerDescFROM[dbo].[AppDatabases]WITH(NOLOCK)2)数据库对象引用在多表关联时,列名前需要加上别名(或表名),表名前加Owner(dbo)。
如果涉及到跨数据库,就需要加上Database名称。
例如:例如:AdventureWorks.dbo.Contact;存储过程也一样;3)不要拼SQL语句从安全角度出发,尽可能用参数化来实现;4)明确写出关联方式(不要用旧的书写方式)--错误的格式:SELECT*FROM Table1,Table2WHERE Table1.d=Table2.c--正确的格式:SELECT Tb1.Columns1,Tb2.Columns2FROM Table1Tb1WITH(NOLOCK)INNER JOIN Table2Tb2WITH(NOLOCK)ON Tb1.d=Tb2.c5)SQL语句缩进方式SQL语句要按照缩进方式书写。
提高可读性。
例如:Example:Wrong FormatSELECT erName,UD.PasswordEncode FROM erDetails UDWITH(NOLOCK)INNER JOIN Employee E WITH(NOLOCK)ON E.EmployID=erIDExample:Correct FormatSELECT erName,UD.PasswordEncodeFROM erDetails UD WITH(NOLOCK)INNER JOIN Employee E WITH(NOLOCK)ON erID=E.EmployID6)SQL保留字要大写对SQL的保留字,都需要大写。
例如:SELECT,UPDATE,INSERT,WHERE,INNER JOIN,AND,OR等。
7)不使用系统前缀不要用系统对象使用了的前缀来命名。
例如“sp_”是数据库系统自身存储过程的前缀(请参存储过程的命名格式);8)注释的重要性,注释是必须的不要忘记在存储过程,触发器,SQL Batches中添加注释。
注释不会影响性能。
9)注释部分修改的规范至少要包含,以下三个关键信息:/*修改日期:修改人:修改内容:*/10)注释的格式单行注释,用两个减号(--)。
多好注释,用(/**/)括起来;11)过多使用GOTO语句会使得代码可读性降低三、性能相关1)尽量用主键在Update和Delete的Where子句中,尽量用主键2)尽量避免使用游标Cursors建议使用SELECT语句,或用While Loop语句实现相同功能;方法说明:●每个表基本上都有一个自增的唯一标志字段(字符串也有一样),先取出符合条件的最大最小值,然后在这个范围内部循环,就可以达到和Cursor一样的功能。
●把查询结果放到带有自增列的表变量中去;下面是一个简单循环控制的例子:DECLARE@TransactionID INTDECLARE@TransactionType NCHAR(1)DECLARE@Quantity INTSET@TransactionID=(SELECT MIN(TransactionID)FROM TransactionHistory)WHILE@TransactionID IS NOT NULLBEGINSET@TransactionID=(SELECT MIN(TransactionID)FROM Production.TransactionHistory WHERE TransactionID> @TransactionID)--Do something hereEND3)SET NOCOUNT ON语句把SET NOCOUNT ON语句放到存储过程和触发器中,作为第一句执行语句。
例如:CREATE PROCEDURE[dbo].[UP_GetOrgChildren]ASBEGINSET NOCOUNT ON......关闭数据库提示输出。
4)模糊查询Like语句在模糊查询Like语句中,禁止使用前置通配。
即不要在单词的第一个字母使用百分号%。
这样Index不再起作用;5)禁止在Where子句关联字段上使用函数这会使得Index不起作用;6)Filtered Index可以提高查询性能当特定集合经常被访问,使用Filtered Index可以提高查询性能,可以减少索引维护开销;7)尽量不用临时表建议使用派生表或公用表表达式(CTE)--查找排在第二位的价格SELECT Min(UnitPrice)FROM Products With(Nolock)WHERE ProductID IN(SELECT TOP2ProductIDFROM Products With(Nolock)ORDER BY UnitPrice DESC)实现同样功能,可以改造成以下用派生表来表达。
效率是上面的两倍:SELECT Min(UnitPrice)FROM(SELECT TOP2UnitPriceFROM Products With(Nolock)ORDER BY UnitPrice DESC)As Pro8)WHERE子句中不用“不等于号”9)及时检查global变量@@ERROR在执行数据处理(INSERT/UPDATE/DELETE)后,及时检查global变量@@ERROR。
以便在出错时,能Rollback。
或者用Try Catch;10)Declare语句在存储过程的起始部分定义Declare语句。