SQL编程规范【金沙澳门登录网站】,2008从入门到精通

金沙澳门登录网站 25

SQL编程规范【金沙澳门登录网站】,2008从入门到精通

目录

摘要 正文是参照他事他说加以考察相关材质总括的大器晚成篇关于T-SQL语言编制程序规范的小说,意在为索要这地点材质的IT公司企划开拓职员提供二个参谋。
来源:

  • 1.行使Transact-SQL语言编制程序
    • 1.1.数码定义语言DDL
    • 1.2.多少垄断语言DML
    • 1.3.数量调控语言DCL
    • 1.4.Transact-SQL语言底工
  • 2.运算符
    • 2.1.算数运算符
    • 2.2.赋值运算符
    • 2.3.位运算符
    • 2.4.比较运算符
    • 2.5.逻辑运算符
    • 2.6.连接运算符
    • 2.7.一元运算符
    • 2.8.运算符的先行级
  • 3.调整语句
    • 3.1.BEGIN
      END语句块
    • 3.2.IF
      ELSE语句块
    • 3.3.CASE分支语句
    • 3.4.WHILE语句
    • 3.5.WAITFO奥迪Q5延缓语句
    • 3.6.RETU普拉多N无条件退出语句
    • 3.7.GOTO跳转语句
    • 3.8.TPRADOY
      CATCH错误处理语句
  • 4.常用函数
    • 4.1.数据类型调换函数

概述

1.使用Transact-SQL语言编制程序

即使SQL Server
2010提供了图形化分界面,但只有大器晚成种Transact-SQL语言能够向来与数据库引擎进行相互。根据施行效用特色能够将Transact-SQL语言分成3大类:数据定义语言DDL,数据操纵语言DML,数据调整语言DCL。

1.1.宗旨原则

以大小写敏感编写SQL语句。

尽恐怕使用Unicode
数据类型。

先行利用连接取代子查询或嵌套查询。

尽恐怕利用参数化SQL查询取代语句拼接SQL查询。

幸免接纳[拼音]+[英语]的秘诀来定名SQL对象或变量。

尽心尽力使用存款和储蓄进程取代SQL语句。

1.1.多少定义语言DDL

是最幼功的Transact-SQL语言类型,用来创立数据库和开创,改善,删除数据库中的各个对象,为其余语言的操作提供对象。比方数据库,表,触发器,存款和储蓄进度,视图,函数,索引,类型及客商等都以数据库中的对象。布衣蔬食的DDL语句富含

CREATE TABLE--创建表
DROP TABLE--删除表
ALTER TABLE--修改表

1.2.为主标准

提出利用帕斯Carl样式或Camel样式命名数据库对象。

大写T-SQL语言的享有首要字,谓词和体系函数。

1.2.数目操纵语言DML

是用于操纵表和视图中的数据的口舌,比方查询数据(SELECT卡塔 尔(英语:State of Qatar),插入数据(INSERT卡塔 尔(英语:State of Qatar),更新数据(UPDATE卡塔 尔(英语:State of Qatar)和删除数据(DELETE)等。

取名规范

在雷同情况下,接收帕Skar样式或Camel样式命名数据库对象,使在付出基于数据库应用程序的时候经过ORM工具生成的多寡访谈代码无需调动就相符程序支付语言(譬喻C#卡塔 尔(英语:State of Qatar)命名标准。其它,关系型数据库同Xml结合得更其严密,标准的命名越来越主要。

在骨子里数据库开采进程中,假设供给方已经提供数据库实施方案,建议以提供的方案为准;在原始数据库上拓宽进级开荒时,在有效的处境下可适用做出规划调节以符合编制程序标准。

1.3.数据调控语言DCL

涉及到权力处理的言语称为数据调节语言,重要用来施行有关安全治本的操作。如付与权限(GRANT卡塔尔,收回权限(REVOKE卡塔尔,拒却付与主体权限,并防御主体通过组或角色成员持续权限(DENY

1.3.目的命名

1.4.Transact-SQL言语底蕴

1.3.1. 数据库

先是种方法,接纳帕斯Carl样式命名,命名格式为[类型印度语印尼语名称]。

示例:AdventureWorks

第二种方法,选取帕斯Carl样式命名,命名格式为[品类保加阿里格尔语名称]

  • Db。

示例:AdventureWorksDb

 
BizTalkRuleEngineDb

提出利用第风流浪漫种办法。

1.4.1.常量与变量

常量十分少说。在SQL Server
二〇〇九中,存在二种变量。生龙活虎种是系统定义和保证的全局变量,风流倜傥种是顾客定义用来保存中间结果的有的变量。

1.3.2. 数据库文件

数据文件:[数据库名称] +
_Data.mdf

日记文件:[数据库名称] +
_Log.ldf

示例:AdventureWorks_Data.mdf

     
AdventureWorks_Log.ldf

1.4.1.1.种类全局变量

系统全局变量分为两大类,风华正茂类是与自然SQL
Server连接或与近年来拍卖有关的全局变量,如@@Rowcount意味着近些日子八个言语影响的行数。@@error表示保留近些日子实践操作的谬误状态。风流罗曼蒂克类是与总体SQL
Server系统有关的全局变量,如@@Version代表近日SQL Server的版本消息。

SELECT @@VERSION AS 当前版本;--查看当前SQL Server的版本信息

结果如图所示
金沙澳门登录网站 1

1.3.3. 关系型数据仓库

使用Pascal样式命名,命名格式为[类型意大利共和国语名称]

  • DW。

示例:AdventureWorksDW

1.4.1.2.局地变量

部分变量能够享有一定数据类型,有自然的功用域,经常用于充任流速計总计或调节循环试行次数,或许用于保存数据值。局地变量前唯有1个@符,用DECLARE语句申明局部变量。

USE test
DECLARE @StudentId varchar(20)
SET @StudentId=(
SELECT Student.stu_no
FROM Student
WHERE stu_enter_score='603')
SELECT @StudentId AS 入学分数为603的学生学号
GO

结果如图所示
金沙澳门登录网站 2

1.3.4. 数量架构

除SQL Server
系统定义的数据框架结构外,新建架构选取帕斯Carl样式命名,命名格式为[架构名]。

示例:HumanResources

      Production

对数据库对象
Table,View,Procedure,Function等应用数据架构进行归类。在SQL Server
贰零零壹中dbo为暗中认可架构。

2.运算符

1.3.5. 数据表

动用帕斯Carl样式命名,命名格式为[表名]。

示例:Employee

      Product

表名以色列德国文单数命名,主要是参照SQL
Server
二零零七示范数据库,个人精晓不采纳复数是为了更加好的施用ORM工具生成相符编制程序标准的代码(譬喻C#)。

示例:使用Product

 而不是Products

2.1.算数运算符

在SQL Server
二〇〇八中,算数运算包涵加(+卡塔 尔(阿拉伯语:قطر‎减(-卡塔 尔(阿拉伯语:قطر‎乘(*卡塔尔除(/卡塔 尔(阿拉伯语:قطر‎取模(%卡塔尔国。举一个简短的例子。
示例1:在Student表中加多一列,列名称为stu_age,根据Student表的stu_birthday列计算stu_age列并插入数据。(演示插入整列数据的艺术卡塔尔国
Student表数据如图所示
金沙澳门登录网站 3
试行上边包车型地铁口舌

ALTER TABLE Student
ADD stu_age int;--在Student表中添加stu_age列
CREATE TABLE #agetemp(stu_no varchar(8),age int);--新建一个临时表
INSERT INTO #agetemp(stu_no,age)--在临时表中插入学号和计算出来的年龄
SELECT Student.stu_no,YEAR(GETDATE())-YEAR(stu_birthday)--利用函数和运算符计算年龄
FROM Student;
UPDATE Student
SET Student.stu_age=#agetemp.age--将临时表中的age列数据整个复制到Student表的stu_age列
FROM #agetemp
WHERE Student.stu_no=#agetemp.stu_no--条件是两个表的stu_no列值相等
GO
SELECT * FROM Student

结果如图所示
金沙澳门登录网站 4

1.3.6. 数据视图

视图名称接收帕斯Carl样式命名,命名格式为v

  • [视图名称]。

示例:vEmployee

     
vSalesPerson

2.2.赋值运算符

即等号(=卡塔尔国,将表明式的值授予另叁个变量。举三个粗略的事例。
示例2:总括Student表中学子的平均入学战绩并打印。
Student表的数额如图所示,stu_enter_score列存放了学生的入学成绩
金沙澳门登录网站 5
实行上边包车型客车言辞

DECLARE @average int--声明@average变量
SET @average=(--将计算出的平均值赋值给@average
SELECT AVG(stu_enter_score)
FROM Student)
PRINT @average--打印@average的值

结果如图所示
金沙澳门登录网站 6

1.3.7. 数据列

列名称命名采纳泰语单词或缩写,立陶宛语单词只来自于实际专门的工作定义,尽量发挥清楚含义。采取帕斯Carl样式命名,命名格式为[列名称]。

示例:AddressID

      PostalCode

尽量幸免使用拼音命名,假使不可幸免,对于非常短的列名,采纳拼音全写,假如拼音列名相比复杂,能够运用第三个字用全拼,别的字用首字母大写表示。

示例:宁波
Ningbo

  经营方式 JingYFS

2.3.位运算符

位运算符包含与运算(&卡塔尔,或运算(|卡塔尔国和异或运算(^卡塔 尔(阿拉伯语:قطر‎,能够对八个表达式举行位操作,那多个表明式能够是整型数据或二进制数据。Transact-SQL首先把整型数据调换为二进制数据,然后按位运算。举个轻巧的事例。
示例3:注脚2个int型变量@num1,@num2,对那七个赋值且做与或异或运算。
实践上边包车型地铁言语

DECLARE @num1 int,@num2 int
SET @num1=5 
SET @num2=6
SELECT @num1&@num2 AS 与,
@num1|@num2 AS 或,
@num1^@num2 AS 异或

结果如图所示
金沙澳门登录网站 7
扩张示例4:写四个十进制调换为二进制的函数

CREATE FUNCTION Bin_con_dec(@dec int)--定义十进制转换为二进制函数
RETURNS varchar(20)
AS
BEGIN
DECLARE @quo int,@remainder varchar(20),@quo1 int
SET @quo=@dec
SET @remainder=''
WHILE @quo<>0
BEGIN
SET @quo1=@quo/2
SET @remainder=CAST(@quo%2 AS varchar(20))+@remainder
SET @quo=@quo1
END
RETURN @remainder
END

实行上边的函数后,运维下列语句验证函数准确性

PRINT dbo.Bin_con_dec(42)

结果为101010,函数定义精确。

1.3.8. 存款和储蓄进度

建议利用帕斯Carl样式命名,命名格式为[存款和储蓄进度名称]。

示例:GetUser

     AddUser

备考:在SQL Server
二〇〇五示范数据库中动用Camel样式命名。

2.4.相比运算符

也称关系运算符,用于相比较几个值的关系,习认为常的有等于(=卡塔 尔(英语:State of Qatar),大于(>卡塔 尔(阿拉伯语:قطر‎,小于(<卡塔尔,大于等于(>=卡塔 尔(英语:State of Qatar),小于等于(<=卡塔尔国,不等于(<>或!=卡塔尔
示例5:从Student表中询问入学战绩在平均分以上的上学的儿童音讯
Student表的多少如图所示
金沙澳门登录网站 8
实施下列语句

DECLARE @ave int
SET @ave=(SELECT AVG(stu_enter_score) FROM Student)
SELECT *FROM Student
WHERE stu_enter_score>=@ave;

结果如下图所示
金沙澳门登录网站 9

注:无法直接把代码写成上边包车型大巴样式

SELECT * FROM Student
WHERE stu_enter_score>=AVG(stu_enter_score)

消息147,级别15,状态1,第2 行
相会不应出未来WHERE 子句中,除非该聚合位于HAVING
子句或选用列表所满含的子查询中,何况要对其实行联谊的列是表面援用。

因为AVG是聚合函数。

1.3.9. 函数

自定义函数选取帕Skar样式命名,命名格式为[函数名],系统函数使用全体大写。

示例:SELECT ISNULL(@LastName,’Unknown last
name’);

GETDATE()

2.5.逻辑运算符

逻辑运算符的效应是对规格进行测量检验。ALL,AND,ANY,BETWEEN,EXISTS,IN,LIKE,NOT,ALL,SOME。下边用SOME来比喻。SOME的意义是假如在风华正茂组比较中,有个别为true那就为true。
示例6:查询Student表中是还是不是留存入学成绩超乎平均分的学员,如若存在,输出true,不真实输出false。
Student表的stu_enter_score列(入学成绩卡塔尔国数据如图所示
金沙澳门登录网站 10
推行上面包车型大巴语句

USE test
IF (SELECT AVG(stu_enter_score) FROM Student)<=SOME(SELECT stu_enter_score FROM Student)
PRINT 'true'
ELSE
PRINT 'false'
GO

结果如图所示
金沙澳门登录网站 11

1.3.10.     客户定义数据类型

应用Pascal样式命名,命名格式为[自定义数据类型名称]。

示例:Flag

      NameStyle

2.6.连接运算符

加号(+卡塔尔是字符串连接运算符,能够用它把字符串串连起来,在示例4的十进制转二进制函数中,就用上了加号。
示例7:将Student表的stu_name列和stu_enter_score列放在同样列显示,列名称为score
Student表的数额如图所示
金沙澳门登录网站 12
实施下列语句

SELECT stu_name+CAST(stu_enter_score AS VARCHAR(3)) AS score FROM Student

进行理并了结果如图所示
金沙澳门登录网站 13

注:stu_enter_score列数据类型为int,加号只对字符串类型数占有效,由此要用CAST函数将stu_enter_score的数据类型转换为varchar(3),那样本事兑现字符串拼接。

1.3.11.     DML触发器

DML触发器是当数据库服务器中爆发多少操作语言
(DML) 事件时要试行的操作。DML 事件包罗对表或视图发出的 UPDATE、INSERT 或
DELETE 语句。依据事件不一样命名准则使用前缀实行区分,格式为 [u|i|d] +
[表名|视图名]

示例:uEmployee

  iEmployee

      dEmployee

除此以外大器晚成种办法为,

AFTER 触发器:TR_表名_[末尾插入加I,修改加U,删除加D]。

INSTEAD OF 触发器:TR_表名或视图名_OF[末尾插入加I,修改加U,删除加D]

2.7.一元运算符

一元运算符只对多少个表明式履行操作,该表达式能够是数字数据类型中的任何后生可畏种数据类型。SQL
Server 2009提供的一元运算符包括正(+卡塔 尔(阿拉伯语:قطر‎,负(-卡塔 尔(阿拉伯语:قطر‎,位反(~)。
示例8:声圣元个int数据类型变量@num并赋值,对该变量做正负位反操作。
推行下列语句

DECLARE @num INT
SET @num=45
SELECT +@num AS 正,-@num AS 负,~@num AS 位反
GO

结果如图所示
金沙澳门登录网站 14

注:位反操作符用于取三个数的补数,只可以用来整数。

1.3.12.     DDL触发器

响应各类数码定义语言
(DDL) 事件而振作感奋。那么些事件首要与以入眼字 CREATE、ALTELacrosse 和 DROP 最早的
Transact-SQL 语句对应。实践 DDL 式操作的种类存款和储蓄进度也能够鼓励 DDL
触发器。

应用Camel样式命名,命名单词能够描述DDL触发器成效。

示例:

CREATE TRIGGER safety

ON DATABASE

FOR DROP_TABLE, ALTER_TABLE

AS

   PRINT ‘You must
disable Trigger “safety” to drop or alter tables!’

   ROLLBACK ;

其它风流浪漫种办法为增添ddl前缀,

示例:

CREATE TRIGGER [ddlDatabaseTriggerLog]

ON DATABASE

FOR DDL_DATABASE_LEVEL_EVENTS

AS

2.8.运算符的预先级

优先级 运算符
1 ~(位反)
2 *(乘),/(除),%(取模)
3 +(正),-(负),+(加),+(连接),-(减),&(位与)
4 =,>,<,>=,<=,<>,!=,!>,!<(比较运算符)
5 ^(位异或),位或(符号打不出来,前面有,自己翻)
6 NOT
7 AND
8 ALL,ANY,BETWEEN,IN,LIKE,ALL,SOME
9 =(赋值)

当表明式中的运算符有相似的优先级时,依据它们在表明式中的地方,一元运算符按从右往左运算,二元运算符(对三个表明式成效的运算符卡塔 尔(阿拉伯语:قطر‎按从左往右运算。
示例9:验证运算符优先级
奉行下列语句

DECLARE @result INT,@num INT
SET @num=45
SET @result=@num+(~@num)*4-@num/(~@num)
SELECT @result AS result
GO

结果如图所示
金沙澳门登录网站 15
测算代码中的表达式
@result=@num+(~@num)4-@num/(~@num)
=@num+(-46)
4-@num/(-46)
=45+(-46)4-45/(-46)
=45+(-46)
4
=-139

1.3.13.     主键、外键关系和目录

主键:
PK_[表名称]_[主键];借使是组成主键,使用PK_[表名]_[主键1]_[主键2]。

示例:PK_Store_CustomerID

 
PK_StoreContact_CustomerID_ContactID

外键关系:FK_[从表名称]_[主表名称]_[外键列名称]。

示例:FK_StoreContact_Store_CustomerID

集中索引: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

备考:以上命名参谋Sql
Server 2006示范数据库,日常只需设计器自动生成,无需格外改革。

3.操纵语句

1.4.参数命名

3.1.BEGIN END语句块

BEGIN END能够定义SQL
Server语句块,使那么些话语作为意气风发组语句推行,允许语句嵌套。比如请见示例4

1.4.1. 数据列参数

取名格式为 @ +
[列名称]。

示例:@EmployeeID

在列名不合乎帕斯Carl样式时(开始的大器晚成段时代遗留系统卡塔 尔(阿拉伯语:قطر‎,比如利用任何大写的列名称,或使用“_”进行一连的字段名称,参数名称定义使用
@ + [列名称],这里的列名称尽量切合帕斯Carl样式命名。

3.2.IF ELSE语句块

用来内定T-SQL语句的实行尺度,若条件为真,则实行尺度表明式前边的话语,条件为假时,可以试用ELSE关键字钦赐要实行的T-SQL语句。比如请见示例4

1.4.2. 非数据列参数

在参数不能够跟列名称实行关联时,使用能够反映该参数功效的土耳其(Turkey卡塔尔国语单词或单词组合,
采取帕斯Carl样式命名。

示例:@ErrorID

      @Flag

3.3.CASE分支语句

示例10:将Student表的上学的儿童,性别和籍贯打字与印刷出来,必要籍贯只能展现省内,本省或自治区。
Student表的数量如图所示
金沙澳门登录网站 16
试行下列语句

SELECT stu_name AS 姓名,stu_sex AS 性别,
(CASE stu_native_place
WHEN '浙江' THEN '省内'
WHEN '内蒙古' THEN '自治区'
WHEN '西藏' THEN '自治区'
WHEN '宁夏' THEN '自治区'
WHEN '新疆' THEN '自治区'
WHEN '广西' THEN '自治区'
ELSE '省外'
END) AS 籍贯 
FROM Student

结果如图所示
金沙澳门登录网站 17

1.5.不可胜言命名

3.4.WHILE语句

用来安装双重试行T-SQL语句或语句块的规格。
示例11:用“*”在荧屏上输出一个小幅度为9的菱形。
进行下列语句

DECLARE @width int,@j int
SET @width=9--@width为菱形的最大宽度
SET @j=1--@j表示每行打印的“*”符号的个数
WHILE @j<=@width
BEGIN
PRINT SPACE((@width-@j)/2)+REPLICATE('*',@j)--SPACE函数打印n个空字符,REPLICATE打印n个特定字符串
SET @j=@j+2
END
SET @j=@width-2
WHILE @j>0
BEGIN
PRINT SPACE((@width-@j)/2)+REPLICATE('*',@j)
SET @j=@j-2
END

结果如图所示
金沙澳门登录网站 18

1.5.1. 常用字段命名

那边的常用字段是指在建表时再三使用的表名或列名,下表对常用字段进行提出性定义,

列名称         
数据类型             表达

CreatedDate    
datetime                纪录创立日期,日常接纳GETDATE()自动生成

ModifiedDate       
datetime                纪录最终更改日期,第二遍选取GETDATE()

DeletedDate    
datetime                记录删除(标志删除卡塔尔国日期

StartDate      
datetime                起头日期

EndDate        
datetime                截止日期

StartTime      
datetime                先河时间

EndTime        
datetime                停止时间

rowguid        
uniqueidentifier        唯生机勃勃标志行的ROWGUIDCOL号,用于援助归拢复制

ID             
int                 使用ID代替Id或id。日常为自拉长主键列

ParentID           
int                 父ID

Status         
int                 状态

3.5.WAITFO瑞鹰推迟语句

WAITFO福特Explorer延迟语句可以让在它现在的口舌在一个钦赐的每一天恐怕时间隔开后实践,能够悬挂起批管理,存款和储蓄进度或职业的实施。
示例12:在有些时刻点查询Student表学号为20180101的学员新闻

BEGIN
WAITFOR TIME '15:03'--在15点03分查询
SELECT * FROM Student
WHERE stu_no='20180101'
END

示例13:在3分钟后查询Student表学号为20180102的学员音信

BEGIN
WAITFOR DELAY '00:03'--在3分钟后查询
SELECT * FROM Student
WHERE stu_no='20180102'
END

金沙澳门登录网站 19

SQL编写

3.6.RETU福特ExplorerN无条件退出语句

该语句表示无条件甘休查询,批管理或存款和储蓄进度的试行。存储进程和批管理RETUTiggoN语句前边的讲话都不再施行。当在仓库储存进程中动用该语句时,可以钦赐再次来到给调用应用程序、批管理或进度的整数值。倘若RETUENVISIONN未钦命重返值,则存款和储蓄进度的再次来到值是0

3.1.大小写

大写T-SQL
语言的有所首要字,谓词和系列函数。变量名称及游标名称使用帕斯Carl样式。数据类型定义使用成套大写。

示例:DECLARE @LastName nvarchar(32);

3.7.GOTO跳转语句

该语句使T-SQL批管理的推行跳转至钦定标签。由于该语句破坏结构化语句的构造,尽量少用
示例13:将GOTO作为分支机制
奉行上边语句

DECLARE @Counter int;  
SET @Counter = 1;  
WHILE @Counter < 10  
BEGIN   
    SELECT @Counter  
    SET @Counter = @Counter + 1  
    IF @Counter = 4 GOTO Branch_One --Jumps to the first branch.  
    IF @Counter = 5 GOTO Branch_Two  --This will never execute.  
END  
Branch_One:  
    SELECT 'Jumping To Branch One.'  
    GOTO Branch_Three; --This will prevent Branch_Two from executing.  
Branch_Two:  
    SELECT 'Jumping To Branch Two.'  
Branch_Three:  
SELECT 'Jumping To Branch Three.';

结果如图所示
金沙澳门登录网站 20
当Counter=4时,试行GOTO语句输出Branch
One,推行完这些讲话之后就打破了WHILE循环,接着推行Branch_One语句中的GOTO,输出Branch
Three,截止。

注:在WHILE循环中运用GOTO会打破循环。

示例14:用GOTO语句达成示例1第11中学打字与印刷菱形的功力
实践下列语句

DECLARE @width int,@j int,@i int
SET @width=9--@width为菱形的最大宽度
SET @j=1--@j表示每行打印的“*”符号的个数
SET @i=1--@i表示下一行打印第i行
Set3:PRINT SPACE((@width-@j)/2)+REPLICATE('*',@j)--SPACE函数打印n个空字符,REPLICATE打印n个特定字符串
SET @i=@i+1
IF @i<=(@width+1)/2
GOTO Set1
ELSE
GOTO Set2
Set1:
SET @j=@j+2
GOTO Set3
Set2:
SET @j=@j-2
IF @j>=1
GOTO Set3

结果如图所示
金沙澳门登录网站 21

3.2.使用“;”

行使“;”作为
Transact-SQL
语句终止符。尽管分号不是必须的,但运用它是大器晚成种好的习贯。

示例:

USE AdventureWorks;

GO

DECLARE @find varchar(30);

SET @find = ‘Man%’;

SELECT LastName, FirstName,
Phone

FROM Person.Contact

WHERE LastName LIKE @find;

3.8.TENCOREY CATCH错误管理语句

若果T奥迪Q3Y块内部产生错误,会将调节传递给CATCH块内的语句组。T奥迪Q3Y
CATCH构造捕捉全部严重品级大于10但不会告黄金年代段落数据库连接的谬误。
示例15:TRY CATCH的示例
进行下列语句

BEGIN TRY
SELECT * FROM Student
SELECT 120/0 FROM Student
END TRY
BEGIN CATCH
SELECT ERROR_MESSAGE() AS '错误信息'
END CATCH

施行结果如图所示
金沙澳门登录网站 22
语句中3个select语句全部都举办了。假使把报错的select语句放到平常的select语句前边,平常的select语句还能够不可能奉行吗?推行下列语句

BEGIN TRY
SELECT 120/0 FROM Student
SELECT * FROM Student
END TRY
BEGIN CATCH
SELECT ERROR_MESSAGE() AS '错误信息'
END CATCH

结果如图所示
金沙澳门登录网站 23
平常select语句不或许履行。TENCOREY
CATCH语句的逻辑是,风度翩翩旦T福睿斯Y语句块中冒出难点讲话,即刻跳转到CATCH语句块,TSportageY语句块接下去的说话不再施行。

3.3.存款和储蓄格式

尽量接纳Unicode数据存款和储蓄格式,进步可移植性和包容性,实际行使中尽量利用nchar、nvarchar、ntext取代char、varchar、text。

4.常用函数

3.4.类型选择

若果字符具备显著的长度,使用nchar代替nvarchar;char替代varchar。

在独有多个只怕数值时,使用bit代替int或smallint。

在SQL Server
2005中,使用nvarchar(MAX)代替ntext;varchar(MAX)代替text;varbinary(MAX)代替image。

在特殊的数据表结构中可思索xml数据类型,到达事半工倍的机能。

4.1.数据类型转变函数

私下认可景况下SQL
Server会对有个别数据类型举行机动转换,这种转移称为隐式调换。境遇不能够自行转换,则要求用CAST()函数和CONVERT()函数转变,这种转移称为显式转变。CAST()函数和CONVERT()函数的效果与利益是千篇意气风发律的,CAST函数更便于选用,CONVERT函数的优点是能够钦定日期和数值格式。
示例16:将Student表中的学号转变为日期格式
下边两句语句的职能是风姿罗曼蒂克律的,试行下列语句

SELECT stu_name,CAST(stu_no AS DATE) AS 学号转换成日期,stu_enter_score,stu_birthday FROM Student
SELECT stu_name,CONVERT(DATE,stu_no) AS 学号转换成日期,stu_enter_score,stu_birthday FROM Student

结果如图所示
金沙澳门登录网站 24
示例17:用CONVERT()函数将stu_birthday转产生钦赐格式的日子
实践下列语句

SELECT stu_name,CONVERT(VARCHAR(20),stu_birthday,101) FROM Student
--CONVERT函数将DATE类型的stu_birthday字段转化为字符串,并限定了样式,代码101

结果如图所示
金沙澳门登录网站 25

注:在上述代码中,CONVERT(DATE,stu_birthday,101)这么写是没用的。101格式码只对日期格式转变为字符串有效,别的格式转变为日期格式是不著见效的。

别的常用函数太轻巧了此地不写了,略。

3.5.默认值

在创建数量表时,尽量使用暗许值代替NULL值。举例设置CreatedDate列暗中同意值为GETDATE()。在有效的图景下设置字段为不允许空。

3.6.字段长度

始终钦点字符数据类型的长度,并保管允许顾客大概需求的最大字符数,防止过量最大尺寸时现身字符遗失现象。对于字符型数据,提议采纳2的n次方来定义数据长度。

示例:nvarchar(32)

  varchar(64)

3.7.使用“’”

在 T-SQL
代码中为字符常量使用单引号,避免选拔双引号。

3.8.语句缩进

贰个嵌套代码块中的语句使用多个空格的缩进。使用Microsoft
SQL Server Management Studio
,选拔“工具”菜单,展开“选项”菜单,在增选对话框中筛选文本编辑器->纯文本->制表符,选中“插入空格单选框”,设置“制表符大小”为4,缩进大小为“4”。

3.9.语句换行

建议SQL代码每行以重大字或“’”开首。

示例:

SELECT [ShiftID]

      ,[Name]

      ,[StartTime]

      ,[EndTime]

      ,[ModifiedDate]

  FROM [AdventureWorks].[HumanResources].[Shift]

3.10.   语句分割

使用一个(并不是四个卡塔尔国空行分隔
T-SQL 代码的逻辑块。

3.11.   使用“*”

尽量防止在别的代码中使用
“SELECT *”。

3.12.   表名小名

表名外号要简明,但意义要尽可能明显。平日接受大写的表名作为别名,使用
AS 关键字钦点表或字段的小名。

3.13.   类型转变

毫不借助任何隐式的数据类型转变,不要假定
T-SQL
会开展须要的转移。举个例子,把数字变量付与字符值。相反,在为变量赋值或比较值早前,应运用合适的
CONVERT 函数使数据类型相相配。

3.14.   数值比较

毫无将空的变量值直接与相比较运算符(符号卡塔 尔(阿拉伯语:قطر‎相比较。假设变量恐怕为空,应利用
IS NULL 或 IS NOT NULL 实行比较,可能利用 ISNULL 函数。

3.15.   排序

毫不要凭借 SELECT
语句会按别的特定顺序重回行,除非在 O昂CoraDERAV4 BY 子句中钦定了后生可畏黄金年代。平时,应将
O凯雷德DEKoleos BY 子句与 SELECT
语句一同使用。可预见的逐个(固然不是最便利的卡塔尔比不足预感的依次强,特别是在开采或调节和测量试验进程中。在重临行的次第漠然置之的情况下,能够忽视O大切诺基DE君越 BY ,收缩财富开拓。

3.16.   Unicode字符串

在Unicode字符前边使用N前缀,制止引起数据的不相符。

示例:


Assumes the default code page is not Greek

CREATE TABLE #t1 (c1 nchar(1))

INSERT #t1 VALUES(N’Ω’)

INSERT #t1 VALUES(‘Ω’)

SELECT * FROM
#t1

输出结果:

c1  


Ω

O

3.17.   BEGIN…END 块

在SQL代码快中尽量使用BEGIN…END
语句块,升高代码可阅读性。

3.18.   TRY块

在SQL Server
二零零七中对一些恐怕施行停业的言辞尽量接收T本田UR-VY块。Transact-SQL
语句组能够包涵在 T兰德纳瓦拉Y 块中,假诺 T福睿斯Y 块内部产生错误,则会将决定传递给
CATCH 块中包含的另二个语句组。

示例:

BEGIN TRY

    SQL 语句组1

END TRY

BEGIN CATCH

    SQL 语句组2

END CATCH;

3.19.   TOP子句

在SQL Server
贰零零陆中提升了TOP的应用,尽量利用TOP(变量)来收缩SQL拼串现象。

3.20.   TRANSACTION编写

倘使在例程中动用四个数据库修正语句,包罗在一个循环中一再实施贰个话语,就应酌量声显然式事务。在SQL
SERAV4VEEnclave 2006 中,增添了T奇骏Y块可开展很好的利用。

实例:

   
BEGIN TRY

        BEGIN TRANSACTION;

        UPDATE [HumanResources].[Employee]

        SET [Title] = @Title

            ,[HireDate] = @HireDate

            ,[CurrentFlag] = @CurrentFlag

        WHERE [EmployeeID] = @EmployeeID;

        INSERT INTO
[HumanResources].[EmployeePayHistory]

            ([EmployeeID]

            ,[RateChangeDate]

            ,[Rate]

            ,[PayFrequency])

        VALUES (@EmployeeID, @RateChangeDate, @Rate,
@PayFrequency);

        COMMIT TRANSACTION;

    END TRY

    BEGIN CATCH

        — Rollback any active or uncommittable
transactions before

        — inserting information in the
ErrorLog

        IF @@TRANCOUNT > 0

        BEGIN

            ROLLBACK TRANSACTION;

        END

        EXECUTE [dbo].[uspLogError];

   
END CATCH;

3.21.   存款和储蓄过程

在编排存款和储蓄进度时,使用PROCEDURE 代替 PROC 简写。

示例:CREATE PROCEDURE [dbo].[仓储进程名字]

代码注释

4.1.代码尾部注释

在SQL代码块(sql文件或存款和储蓄进度卡塔尔国的头顶举行疏解,标明创设人(Author)、创始日期(Create date)、修改音信(Modify [n])。

格式:


Author:      <Author,,Name>

— Create
date: <Create Date,,>


Description: <Description,,>

— Modify
[n]:  < Modifier,Date, Description >

示例:


Author:      Zhanghaifeng

— Create
date: 2006-12-25


Description: H二零零零报关单回执管理

— Modify
[1]:  郑佐,
2006-12-31, 简化逻辑剖断流程

— Modify
[2]:  郑佐,
二零零五-01-20, 更新标准判别

注:日期格式使用
yyyy-MM-dd。Modify [n] n代表修改序号,从1从头,每便校勘加1。

4.2.TRANSACTION注释

提出在每一种事情的发端进行讲解,表达该事务的法力。

— <
Modifier,Date, Description >

BEGIN TRANSACTION;

附录A  命名准则

广大命名法规有三种体裁:完全大写、完全小写、Pascal大小写和 Camel 大小写。

5.1.Pascal 大小写

组合标志符的每种单词的首字母大写,其他字母小写的书写约定。对于缩写的双字母单词,需求全部大写。

例如:ApplicationException

      ID

5.2.Camel 大小写

标志符的首字母小写,种种后边连接的单词的首字母大写,其他字母小写的书写约定。对于缩写的双字母单词,须求它们出未来标记符首部时整个大写,不然全部大写。

例如:applicationException

      id

5.3.匈牙利(Magyarország卡塔 尔(阿拉伯语:قطر‎命名法

匈牙利(Hungary卡塔 尔(阿拉伯语:قطر‎命名法由匈牙利(Magyarország卡塔尔国程序猿发明,他在微软办事了连年,此命名法正是因此微软的各样成品和文书档案传出来。许多有经验的程序猿,不管他们用的是哪门语言,都或多或少在动用它。

骨干尺度:变量名 = 属性
+ 类型 + 对象描述

即多少个变量名是由三有个别消息整合,那样,程序猿非常轻便精通变量的连串、用处,何况有益于记念。

附录B  参照他事他说加以考察财富

6.1.Microsoft SQL Server 二〇〇五 联机丛书

http://www.microsoft.com/downloads/details.aspx?displaylang=zh-cn&FamilyID=BE6A2C5D-00DF-4220-B133-29C1E0B6585F

6.2.SQL Server 二零零五演示数据库

AdventureWorks

AdventureWorksDW

6.3.编纂可移植的 Transact-SQL 代码

http://www.microsoft.com/china/msdn/library/data/sqlserver/USsqldnsqldevdev_06112004L.mspx

6.4.T-SQL 编码标准

admin

网站地图xml地图