2008从入门到精通,SQL编程规范

作者:亚搏app官网    发布时间:2019-11-03 15:54    浏览:65 次

[返回]

目录

摘要 本文是参照相关资料总括的大器晚成篇有关T-SQL语言编制程序规范的篇章,意在为急需那方面资料的IT公司安插开垦职员提供叁个参阅。
来源:

  • 1.行使Transact-SQL语言编程
    • 1.1.数码定义语言DDL
    • 1.2.多少垄断(monopoly卡塔 尔(英语:State of Qatar)语言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.WAITFORAV4延缓语句
    • 3.6.RETU奥迪Q3N无条件退出语句
    • 3.7.GOTO跳转语句
    • 3.8.TWranglerY CATCH错误管理语句
  • 4.常用函数
    • 4.1.数据类型调换函数

概述

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

纵然SQL Server 2009提供了图形化界面,但唯有生机勃勃种Transact-SQL语言能够向来与数据库引擎举行相互作用。依据实施效劳特色能够将Transact-SQL语言分成3大类:数据定义语言DDL,数据垄断(monopoly卡塔 尔(英语:State of Qatar)语言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卡塔尔,插入数据(INSERT卡塔 尔(英语:State of Qatar),更新数据(UPDATE卡塔 尔(英语:State of Qatar)和删除数据(DELETE)等。

取名规范

在日常景色下,采取帕斯Carl样式或Camel样式命名数据库对象,使在支付基于数据库应用程序的时候经过ORM工具生成的数量访谈代码不须要调动就适合程序支付语言(举个例子C#卡塔 尔(英语:State of Qatar)命名规范。此外,关系型数据库同Xml结合得进一层紧凑,规范的命名更加的首要。

在其实数据库开垦进度中,假诺必要方已经提供数据库应用方案,建议以提供的方案为准;在本来数据库上进展升高开拓时,在有效的情景下可非常做出规划调度以切合编制程序标准。

1.3.数码调整语言DCL

提到到权力管理的言语称为数据调节语言,主要用于实施有关安全管理的操作。如付与权限(GRANT卡塔 尔(英语:State of Qatar),收回权限(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. 关系型数据仓库

运用帕斯Carl样式命名,命名格式为[品种乌Crane语名称]

  • 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 二〇〇八中,算数运算包罗加(+卡塔 尔(阿拉伯语:قطر‎减(-卡塔尔国乘(*卡塔 尔(英语:State of Qatar)除(/卡塔尔取模(%卡塔尔国。举三个粗略的事例。
示例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.赋值运算符

即等号(=卡塔 尔(英语:State of Qatar),将表明式的值授予另二个变量。举多个简洁明了的例证。
示例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

尽量避免使用拼音命名,假如不可防止,对于超级短的列名,选择拼音全写,如果拼音列名比较复杂,能够运用第3个字用全拼,其余字用首字母大写表示。

示例:宁波 Ningbo

  经营方式 JingYFS

2.3.位运算符

位运算符包含与运算(&卡塔 尔(英语:State of Qatar),或运算(|卡塔 尔(阿拉伯语:قطر‎和异或运算(^卡塔 尔(英语:State of Qatar),能够对五个表明式实行位操作,那多个表明式能够是整型数据或二进制数据。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. 仓库储存进度

提出使用Pascal样式命名,命名格式为[仓库储存进程名称]。

示例:GetUser

     AddUser

备考:在SQL Server 二〇〇六示范数据库中央银行使Camel样式命名。

2.4.相比较运算符

也称关系运算符,用于相比较七个值的涉嫌,管见所及的有等于(=卡塔尔,大于(>卡塔尔,小于(<卡塔尔国,大于等于(>=卡塔 尔(英语: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. 函数

自定义函数接收帕斯Carl样式命名,命名格式为[函数名],系统函数使用成套大写。

示例: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.     客商定义数据类型

运用帕斯Carl样式命名,命名格式为[自定义数据类型名称]。

示例:Flag

      NameStyle

2.6.连接运算符

加号(+卡塔 尔(英语:State of Qatar)是字符串连接运算符,能够用它把字符串串连起来,在示例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 二零一零提供的一元运算符包涵正(+卡塔尔国,负(-卡塔 尔(英语:State of Qatar),位反(~)。
示例8:声雅培(Abbott卡塔尔国个int数据类型变量@num并赋值,对该变量做正负位反操作。
实施下列语句

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

结果如图所示
图片 14

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

1.3.12.     DDL触发器

八方呼应各样数码定义语言 (DDL) 事件而激情。那几个事件主要与以重要字 CREATE、ALTEWrangler 和 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 二〇〇七演示数据库,日常只需设计器自动生成,不须求十分改革。

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. 非数据列参数

在参数不可能跟列名称进行关联时,使用能够展现该参数功能的德语单词或单词组合, 接收帕斯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悍马H2延迟语句

WAITFOEnclave延迟语句可以让在它现在的语句在二个钦赐的时刻或然时间隔绝后进行,能够悬挂起批管理,存储进度或作业的施行。
示例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奥迪Q3N无条件退出语句

该语句表示无条件停止查询,批管理或存款和储蓄进度的推行。存款和储蓄进度和批处理RETURubiconN语句后边的说话都不再实行。当在蕴藏进度中使用该语句时,能够内定重回给调用应用程序、批管理或进度的整数值。尽管RETU传祺N未内定再次回到值,则存储进度的重返值是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.TCR-VY CATCH错误管理语句

若果TCR-VY块内部产生错误,会将调整传递给CATCH块内的语句组。TEnclaveY 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语句不可能实践。TPAJEROY CATCH语句的逻辑是,生龙活虎旦TGL450Y语句块中现身难点讲话,立时跳转到CATCH语句块,T智跑Y语句块接下去的言辞不再实行。

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福睿斯DE奥迪Q5 BY 子句中钦定了逐一。平时,应将 O奥迪Q5DEOdyssey BY 子句与 SELECT 语句一齐利用。可预感的依次(就算不是最有益的卡塔尔国比不足预言的次第强,特别是在支付或调节和测量试验进度中。在重返行的顺序袖手旁观的气象下,能够忽视OHavalDEMurano 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大切诺基Y块。Transact-SQL 语句组能够包括在 T奥迪Q5Y 块中,假设 TEscortY 块内部发生错误,则会将调控传递给 CATCH 块中隐含的另一个语句组。

示例:

BEGIN TRY

    SQL 语句组1

END TRY

BEGIN CATCH

    SQL 语句组2

END CATCH;

3.19.   TOP子句

在SQL Server 200第55中学抓好了TOP的利用,尽量接收TOP(变量)来压缩SQL拼串现象。

3.20.   TRANSACTION编写

倘使在例程中接收多少个数据库矫正语句,满含在一个循环中频频实行三个言辞,就应考虑声显著式事务。在SQL SEQX56VE奇骏 二〇〇七 中,扩充了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文件或存款和储蓄进度卡塔 尔(英语:State of Qatar)的尾部实行申明,标记创设人(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]:  郑佐, 二零零六-12-31, 简化逻辑剖断流程

-- Modify [2]:  郑佐, 二〇〇五-01-20, 更新标准决断

--

注:日期格式使用 yyyy-MM-dd。Modify [n] n代表改正序号,从1起来,每一遍修改加1。

4.2.TRANSACTION注释

提出在每一个专门的学业的起来举行批注,表达该专门的学问的意义。

-- < Modifier,Date, Description >

BEGIN TRANSACTION;

附录A  命名准绳

广大命名法则有三种体裁:完全大写、完全小写、帕斯Carl大小写和 Camel 大小写。

5.1.Pascal 大小写

组成标记符的每个单词的首字母大写,别的字母小写的书写约定。对于缩写的双字母单词,供给全副大写。

例如:ApplicationException

      ID

5.2.Camel 大小写

标记符的首字母小写,每种前边连接的单词的首字母大写,别的字母小写的书写约定。对于缩写的双字母单词,供给它们出今后标志符首部时整个大写,不然全部大写。

例如:applicationException

      id

5.3.匈牙利(Magyarország卡塔尔命名法

匈牙利(Hungary卡塔尔国命名法由匈牙利(Magyarország卡塔尔程序猿发明,他在微软办事了连年,此命名法正是经过微软的各类付加物和文书档案传出来。好些个有经历的技师,不管他们用的是哪门语言,都或多或少在运用它。

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

即一个变量名是由三局地信息整合,那样,程序猿超级轻便精通变量的种类、用项,何况便于回想。

附录B  参照他事他说加以考查能源

6.1.Microsoft SQL Server 2006 联机丛书

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 编码标准

搜索