您的位置:澳门新葡8455最新网站 > 数据库管理 > 二零零六从入门到精晓,SQL编制程序标准

二零零六从入门到精晓,SQL编制程序标准

发布时间:2019-10-08 00:03编辑:数据库管理浏览(109)

    目录

    摘要 本文是参照相关材质计算的一篇关于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途锐延缓语句
      • 3.6.RETU奥迪Q5N无条件退出语句
      • 3.7.GOTO跳转语句
      • 3.8.T中华VY CATCH错误管理语句
    • 4.常用函数
      • 4.1.数据类型转换函数

    概述

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

    固然SQL Server 二零零六提供了图形化分界面,但独有一种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),插入数据(INSERT),更新数据(UPDATE)和删除数据(DELETE)等。

    命名标准

    在日常景色下,接纳帕斯Carl样式或Camel样式命名数据库对象,使在付出基于数据库应用程序的时候经过ORM工具生成的多寡访谈代码不需求调动就相符程序开辟语言(比方C#)命名规范。别的,关系型数据库同Xml结合得更加的紧凑,标准的命名越来越首要。

    在实际数据库开采进度中,假设供给方已经提供数据库建设方案,提出以提供的方案为准;在原始数据库上拓宽进步开垦时,在使得的景观下可少量做出统一准备调节以符合编程标准。

    1.3.数码调控语言DCL

    波及到权力管理的言语称为数据调整语言,首要用于施行有关安全管理的操作。如授予权限(GRANT),收回权限(REVOKE),拒绝授予主体权限,并防御主体通过组或剧中人物成员持续权限(DENY

    1.3.对象命名

    1.4.Transact-SQL言语基础

    1.3.1. 数据库

    第一种艺术,选取帕斯Carl样式命名,命名格式为[品种意大利语名称]。

    示例:AdventureWorks

    第二种情势,采取Pascal样式命名,命名格式为[项目丹麦语名称]

    • 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样式命名,命名格式为[项目斯洛伐克共和国(The Slovak Republic)语名称]

    • 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 2009中,算数运算满含加(+)减(-)乘(*)除(/)取模(%)。举二个简易的事例。
    示例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. 数据列

    列名称命名接纳马耳他语单词或缩写,英语单词只来自于现实专门的职业定义,尽量发挥清楚含义。选取Pascal样式命名,命名格式为[列名称]。

    示例: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.相比运算符

    也称关系运算符,用于相比三个值的关系,常见的有等于(=),大于(>),小于(<),大于等于(>=),小于等于(<=),不等于(<>或!=)
    示例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.     客户定义数据类型

    选用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 二〇一〇提供的一元运算符包括正(+),负(-),位反(~)。
    示例8:声喜宝(Hipp)个int数据类型变量@num并赋值,对该变量做正负位反操作。
    试行下列语句

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

    结果如图所示
    澳门新葡萄京娱乐场 14

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

    1.3.12.     DDL触发器

    响应种种数据定义语言 (DDL) 事件而振作奋发。那几个事件主要与以器重字 CREATE、ALTEENVISION 和 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. 非数据列参数

    在参数无法跟列名称实行关联时,使用能够反映该参数效率的罗马尼亚(罗曼ia)语单词或单词组合, 选择帕斯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.WAITFORAV4推迟语句

    WAITFO本田UR-V延迟语句能够让在它现在的言语在贰个点名的每30日恐怕时间距离后实行,能够悬挂起批管理,存款和储蓄进程或作业的实施。
    示例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途锐N无条件退出语句

    该语句表示无条件结束查询,批处理或存款和储蓄进程的执行。存款和储蓄进程和批管理RETU奥迪Q5N语句后边的话语都不再举行。当在积存进程中应用该语句时,可以钦点再次回到给调用应用程序、批管理或进程的整数值。假诺RETUTucsonN未钦点再次来到值,则存储进程的重回值是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.T福特ExplorerY CATCH错误处理语句

    假定T大切诺基Y块内部爆发错误,会将决定传递给CATCH块内的语句组。T奥德赛Y 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语句不大概施行。T福特ExplorerY CATCH语句的逻辑是,一旦T奥迪Q5Y语句块中冒出难点讲话,登时跳转到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 语句会按别的特定顺序重临行,除非在 OENCOREDEEvoque BY 子句中钦定了各样。平常,应将 O福特ExplorerDE景逸SUV BY 子句与 SELECT 语句一同使用。可预言的相继(固然不是最有利的)比不足预见的逐条强,极其是在开采或调试进程中。在重临行的各样非亲非故首要的景况下,能够忽略 ORubiconDETiguan 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 二零零七中对某个也许实行倒闭的话语尽量采取TOdysseyY块。Transact-SQL 语句组能够包含在 T科雷傲Y 块中,如若 T奥迪Q7Y 块内部爆发错误,则会将决定传递给 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 SE奥迪Q3VE奇骏 二零零六 中,扩大了T奥迪Q5Y块可开展很好的行使。

    实例:

        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: H3000报关单回执管理

    -- Modify [1]:  郑佐, 二零零六-12-31, 简化逻辑判别流程

    -- Modify [2]:  郑佐, 2005-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 编码规范

    本文由澳门新葡8455最新网站发布于数据库管理,转载请注明出处:二零零六从入门到精晓,SQL编制程序标准

    关键词: