《SQL Server 2008从入门到精通》--20180716

2019-07-23 02:45栏目:网站首页

1.锁

当多少个用户相同的时间对同一个数目开始展览改变时会发生并发难点,使用职业就能够缓慢解决那个主题材料。可是为了防御其余用户修改另一个还没到位的事情中的数据,就需求在事情中用到锁。
SQL Server 二〇〇九提供了两种锁格局:排他锁,分享锁,更新锁,意向锁,键范围锁,架构锁和大体量更新锁。
查询sys.dm_tran_locks视图能够火速通晓SQL Server 二〇〇八内的加锁景况。

SELECT * FROM sys.dm_tran_locks;

注:关于锁的知识书中没细讲,将要后头的博客中补充。

目录

2.游标

游标是近乎于C语言指针同样的构造,是一种多少访谈机制,允许用户访谈单独的数据行。游标首要由游标结果集和游标地点组成。游标结果集是概念游标的SELECT语句再次来到行的聚焦,游标地点是指向那几个结果聚焦某一行的指针。
示例1:用游标检索出student表中每行记录
Student表记录如图所示
图片 1
举行下列语句

USE test
DECLARE stu_cursor CURSOR FOR
SELECT * FROM student--声明student表的游标stu
OPEN stu_cursor--打开游标
FETCH NEXT FROM stu_cursor--移动该记录指针
WHILE @@FETCH_STATUS=0--@@FETCH_STATUS用于保存FETCH操作的结束信息,=0表示有记录检索成功
BEGIN
FETCH NEXT FROM stu_cursor--游标指针移动到下一条记录
END
CLOSE stu_cursor--关闭游标
DEALLOCATE stu_cursor--释放游标资源

结果如图所示
图片 2

  • 1.用到Transact-SQL语言编制程序
    • 1.1.多少定义语言DDL
    • 1.2.数量垄断(monopoly)语言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福特Explorer延缓语句
    • 3.6.RETUPAJERON无条件退出语句
    • 3.7.GOTO跳转语句
    • 3.8.T奇骏Y CATCH错误管理语句
  • 4.常用函数
    • 4.1.数据类型调换函数

2.1.游标定义的参数LOCAL和GLOBAL

游标定义参数LOCAL表示该游标只可以成效于此番批管理或函数或存款和储蓄进程。游标定义参数GLOBAL表示该游标能够作用于大局。
实施下列语句

DECLARE stu_cursor CURSOR LOCAL
FOR SELECT * FROM student
GO
OPEN stu_cursor
GO

实行结果如下
图片 3
语句中,评释了贰个student表的游标stu_cursor,在展开游标时提示游标官样文章。因为该游标参数是LOCAL,只可以成效于当下批管理语句中,而张开游标语句和注明语句不在贰个批处理中。若是去掉第三个GO,使五个语句在同一个批管理中,就会顺遂试行不会报错。
实施下列语句

DECLARE stu_cursor1 CURSOR GLOBAL
FOR SELECT * FROM student
GO
OPEN stu_cursor1
GO

施行结果:命令已成功完毕
和LOCAL参数比较,GOLBAL参数设置游标功用于大局,由此OPEN和DECLARE语句不在同二个批管理中还能成功进行。

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

固然SQL Server 2010提供了图形化分界面,但唯有一种Transact-SQL语言能够直接与数据库引擎举行互动。依据实行效果特色能够将Transact-SQL语言分成3大类:数据定义语言DDL,数据垄断(monopoly)语言DML,数据调整语言DCL。

2.2.游标分为游标变量和游标类型

如下列语句

--语句1
DECLARE stu_cursor CURSOR
FOR SELECT * FROM student--声明student表的游标名称为stu_cursor并赋值
GO

--语句2
DECLARE @stu_cursor CURSOR--声明游标类型的变量@stu_cursor
SET @stu_cursor=CURSOR FOR--给该变量赋值
SELECT * FROM student

在语句1中央直属机关接评释了一个游标并赋值,而语句第22中学宣称了游标类型的变量@stu_cursor,然后给该变量赋值。这两侧是见仁见智的。

1.1.数额定义语言DDL

是最基础的Transact-SQL语言类型,用来创制数据库和开创,修改,删除数据库中的各类对象,为别的语言的操作提供对象。比如数据库,表,触发器,存款和储蓄进度,视图,函数,索引,类型及用户等皆以数据库中的对象。常见的DDL语句包蕴

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

2.3.游标参数FOWranglerWA昂科威D_ONLY和SCROLL

FORWARD_ONLY参数设置游标只可以从结果集的发端向停止方向读取,使用FETCH语句时只好用NEXT,而SCROLL参数设置游标能够从结果集的放肆方向,大肆个人置移动。如下列语句

--语句1,默认FORWARD_ONLY
DECLARE stu_cursor CURSOR LOCAL
FOR SELECT * FROM student
OPEN stu_cursor
FETCH NEXT FROM stu_cursor
GO
--语句2,FORWARD_ONLY参数,FETCH时只能从开始往结束方向
DECLARE stu_cursor CURSOR FORWARD_ONLY LOCAL
FOR SELECT * FROM student
OPEN stu_cursor 
FETCH NEXT FROM stu_cursor
GO
--语句3,SCROLL参数,FETCH时可以从任意位置往任意方向
DECLARE stu_cursor CURSOR SCROLL LOCAL
FOR SELECT * FROM student
OPEN stu_cursor
FETCH LAST FROM stu_cursor
GO

1.2.数据操纵语言DML

是用以操纵表和视图中的数据的语句,比方查询数据(SELECT),插入数据(INSERT),更新数据(UPDATE)和删除数据(DELETE)等。

2.4.游标的差非常少利用

示例2:将student表中stu_enter_score大于600分的学生都减去100分
Student表中的数据如图所示
图片 4
推行下列语句

--游标的简单应用
DECLARE stu_cursor CURSOR FORWARD_ONLY LOCAL
FOR SELECT stu_no,stu_enter_score FROM student
OPEN stu_cursor
DECLARE @score INT
DECLARE @stu_no VARCHAR(8)
FETCH NEXT FROM stu_cursor INTO @stu_no,@score--把游标值赋值给变量@score
WHILE @@FETCH_STATUS=0 
BEGIN
IF @score>=600
BEGIN
UPDATE student
SET stu_enter_score=@score-100 WHERE stu_no=@stu_no 
END
FETCH NEXT FROM stu_cursor INTO @stu_no,@score--把游标值赋值给变量@score
END
CLOSE stu_cursor
DEALLOCATE stu_cursor
GO

结果如图所示
图片 5

1.3.数目调节语言DCL

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

3.储存进程

存款和储蓄进程是一组用于实现一定作用的语句集,经过编写翻译后存款和储蓄在数据库中。在SQL Server 二零一零中,不只能够用T-SQL编写存款和储蓄进程,也足以用CL索罗德编写存款和储蓄进度。

1.4.Transact-SQL言语功底

3.1.用户定义的仓库储存进程

该种存款和储蓄进度是指封装了可选代替码的模块只怕经过,有2种等级次序:T-SQL存款和储蓄进度和CLHaval存款和储蓄进程。
T-SQL存款和储蓄进度是指保存的T-SQL语句集结
CLLAND存款和储蓄进度是指对Microsoft .NET Framework公共语言运营时(CL智跑)方法的援引

1.4.1.常量与变量

常量没有多少说。在SQL Server 2009中,存在二种变量。一种是系统定义和掩护的全局变量,一种是用户定义用来保存中间结果的一些变量。

3.2.恢弘存款和储蓄进程

扩张存款和储蓄进程是指能够动态加载和平运动作的DLL,允许行使编制程序语言(如C语言)成立自个儿的外界例程。扩张存款和储蓄进程一直在SQL Server 二〇〇九的实例的地点空间中运作,能够应用SQL Server扩大存款和储蓄过程API完毕编制程序。

1.4.1.1.系统全局变量

系统全局变量分为两大类,一类是与自然SQL Server连接或与当下拍卖有关的全局变量,如@@Rowcount代表近日三个口舌影响的行数。@@error代表保留近日推行操作的荒谬状态。一类是与成套SQL Server系统有关的全局变量,如@@Version意味着近来SQL Server的版本音信。

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

结果如图所示
图片 6

3.3.类别存储进度

系统存款和储蓄进度是指累积在源数据库中,以sp开始的积存进程,出现在每一个系统定义数据库和用户定义数据库的sys架构中。

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

结果如图所示
图片 7

3.3.1.开立存款和储蓄进程准则

在规划和创办存款和储蓄进度时,应该满意一定的束缚和法规。

  • CREATE PROCEDURE定义自个儿能够总结随机数量和项指标SQL语句,但下表中的语句除却。不可能在累积进度的别的岗位选取那么些讲话。
  • 能够援用在集合存款和储蓄进度中成立的靶子,只要引用时已开立了该对象
  • 能够在积存进度内引用有时表
  • 只要在蕴藏进度中创设了本地一时表,该不经常表仅为该存款和储蓄进程而留存,退出该存储进程后,该一时表会消失
  • 倘诺进行的积累进程调用了另叁个囤积进程,被调用的寄放进度可以访谈第一个存款和储蓄进度的持有目的,满含一时表
  • 倘使实行对长距离SQL Server 2009实例举行改动的长距离存款和储蓄进度,那么些改动将无法被回滚。远程存储进度不参加事务管理
  • 存款和储蓄进程中的参数的最大数量为2100
  • 仓储进度中的局地变量的最大数据仅受可用内部存款和储蓄器的界定
  • 基于可用内部存款和储蓄器的比不上,存款和储蓄进程最大可达128MB
语句 语句 语句
CREATE AGGREGATE CREATE RULE CREATE DEFAULT
CREATE SCHEMA CREATE(ALTER) FUNCTION CREATE(ALTER) TRIGGER
CREATE(ALTER) PROCEDURE CREATE(ALTER) VIEW SET PARSEONLY
SET SHOWPLAN_ALL SET SHOWPLAN_TEXT SET SHOWPLAN_XML
USE database_name

2.运算符

3.3.2.限制存款和储蓄进度内的名目

在蕴藏进程内,若是用于语句的靶子未有限制架构,则架构将默以为该存款和储蓄进程的架构。假使创设该存款和储蓄进程的用户未有范围INSERT,SELECT,UPDATE或DELETE语句中援用的表名或试图名,则暗中认可景况下通过该存款和储蓄过程进行的拜会将倍受该过程成立者权限的限定。纵然有别的用户要选拔存款和储蓄进度,则持有用于数据定义语言(DDL)的口舌(如CREATE,ALTEMurano,EXECUTE,DROP,DBCC或动态SQL语句)的指标名应当用该对象架构的称谓来界定。

2.1.算数运算符

在SQL Server 二〇〇九中,算数运算包罗加( )减(-)乘(*)除(/)取模(%)。举多少个简约的事例。
示例1:在Student表中增添一列,列名称叫stu_age,根据Student表的stu_birthday列计算stu_age列并插入数据。(演示插入整列数据的不二秘技)
Student表数据如图所示
图片 8
实践上边包车型地铁口舌

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

结果如图所示
图片 9

3.3.3.加密存款和储蓄进程的定义

只要要创制存款和储蓄进度并保障别的用户不能够查看该存款和储蓄进程的定义,则能够应用WITH ENC库罗德YPTION,那样,进程定义将以不足读的样式积存。

2.2.赋值运算符

即等号(=),将表明式的值赋予另二个变量。举多个回顾的例子。
示例2:总结Student表中学生的平分入学成绩并打字与印刷。
Student表的数据如图所示,stu_enter_score列存放了学员的入学战表
图片 10
施行上边包车型地铁讲话

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

结果如图所示
图片 11

3.3.4.SET语句选项

当创立可能改变T-SQL存款和储蓄进程后,数据库引擎将保留SET QUOTED_IDENTIFIER和SET ANSI_NULLS的装置,实践存款和储蓄进度时将采用那些原来设置而忽略任何客户端会话的ET QUOTED_IDENTIFIER和SET ANSI_NULLS设置。其余SET选项在开立或转转移存入款和储蓄过程后不保留。

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 异或

结果如图所示
图片 12
扩充示例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,函数定义准确。

3.4.选择存款和储蓄进度

2.4.相比运算符

也称关系运算符,用于相比五个值的涉嫌,常见的有等于(=),大于(>),小于(<),大于等于(>=),小于等于(<=),不对等(<>或!=)
示例5:从Student表中询问入学成绩在平均分以上的上学的小孩子新闻
Student表的数量如图所示
图片 13
奉行下列语句

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

结果如下图所示
图片 14

注:不能够直接把代码写成上面包车型大巴方式

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

消息147,级别15,状态1,第2 行
聚拢不应出现在WHERE 子句中,除非该聚合位于HAVING 子句或选取列表所蕴藏的子查询中,何况要对其实行联谊的列是外表引用。

因为AVG是聚合函数。

3.4.1.创制存款和储蓄进程

示例3:将示例2用存款和储蓄进程实现
Student表的数据如图所示
图片 15
施行下列语句

CREATE PROCEDURE alter_data
@a int--参数
AS
BEGIN
DECLARE stu_cursor CURSOR FORWARD_ONLY LOCAL
FOR SELECT stu_no,stu_enter_score FROM student
OPEN stu_cursor
DECLARE @score INT
DECLARE @stu_no VARCHAR(8)
FETCH NEXT FROM stu_cursor INTO @stu_no,@score--把游标值赋值给变量@score
WHILE @@FETCH_STATUS=0 
BEGIN
IF @score>=@a
BEGIN
UPDATE student
SET stu_enter_score=@score-100 WHERE stu_no=@stu_no 
END
FETCH NEXT FROM stu_cursor INTO @stu_no,@score--把游标值赋值给变量@score
END
CLOSE stu_cursor
DEALLOCATE stu_cursor
END
GO
EXEC dbo.alter_data '600'

结果如图所示
图片 16

2.5.逻辑运算符

逻辑运算符的作用是对标准进行测验。ALL,AND,ANY,BETWEEN,EXISTS,IN,LIKE,NOT,ALL,SOME。下边用SOME来比喻。SOME的职能是假如在一组比较中,有个别为true那就为true。
示例6:查询Student表中是不是留存入学战绩超过平均分的上学的小孩子,假使存在,输出true,不设有输出false。
Student表的stu_enter_score列(入学成绩)数据如图所示
图片 17
举行上面包车型地铁言语

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

结果如图所示
图片 18

3.4.2.查看存款和储蓄进程

能够经过行使系统存款和储蓄进度还是目录视图查看存款和储蓄过程的定义

2.6.连接运算符

加号( )是字符串连接运算符,可以用它把字符串串连起来,在示例4的十进制转二进制函数中,就用上了加号。
示例7:将Student表的stu_name列和stu_enter_score列放在同等列展现,列名称为score
Student表的多少如图所示
图片 19
推行下列语句

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

进行结果如图所示
图片 20

注:stu_enter_score列数据类型为int,加号只对字符串类型数占领效,由此要用CAST函数将stu_enter_score的数据类型转变为varchar(3),那样工夫促成字符串拼接。

3.4.2.1.图形化分界面

如下图
图片 21

2.7.一元运算符

一元运算符只对一个表明式试行操作,该表达式能够是数字数据类型中的任何一种数据类型。SQL Server 二零零六提供的一元运算符包含正( ),负(-),位反(~)。
示例8:声美赞臣(Meadjohnson)个int数据类型变量@num并赋值,对该变量做正负位反操作。
实践下列语句

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

结果如图所示
图片 22

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

3.4.2.2.类别存款和储蓄进程sp_helptext查看存款和储蓄进度定义

实践下列语句

EXEC sp_helptext 'alter_data'

结果如图所示
图片 23

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

结果如图所示
图片 24
测算代码中的表明式
@result=@num (~@num)4-@num/(~@num)
=@num (-46)
4-@num/(-46)
=45 (-46)4-45/(-46)
=45 (-46)
4
=-139

3.4.2.3.系统存储进程sp_depends查看存款和储蓄进程有关音信

实行下列语句

EXEC sp_depends 'alter_data'

结果如图所示
图片 25

3.说了算语句

3.4.2.4.目录视图查看存款和储蓄进度

实践下列语句

SELECT * FROM sys.procedures

结果如图所示
图片 26

3.1.BEGIN END语句块

BEGIN END能够定义SQL Server语句块,使这么些话语作为一组语句实施,允许语句嵌套。举例请见示例4

3.4.3.修改存款和储蓄进程

ALTER PROCEDURE语句修改存款和储蓄进度,只需将下边示例中的CREATE修改成ALTEQashqai运营就行了。

3.2.IF ELSE语句块

用于钦赐T-SQL语句的实行尺度,若条件为真,则实施尺度表明式前面包车型地铁说话,条件为假时,能够试用ELSE关键字钦定要进行的T-SQL语句。例如请见示例4

3.4.4.删减存款和储蓄进程

进行下列语句删除存款和储蓄进度

DROP PROCEDURE alter_data

3.3.CASE分支语句

示例10:将Student表的学员,性别和原籍打字与印刷出来,需求籍贯只好呈现外省,本省或自治区。
Student表的数码如图所示
图片 27
推行下列语句

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

结果如图所示
图片 28

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

结果如图所示
图片 29

3.5.WAITFOEscort推迟语句

WAITFO凯雷德延迟语句能够让在它之后的语句在贰个钦点的随时大概时间间隔后试行,能够悬挂起批管理,存款和储蓄进度或职业的实行。
示例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

图片 30

3.6.RETU福睿斯N无条件退出语句

该语句表示无条件甘休查询,批处理或存款和储蓄进程的实践。存储进程和批管理RETUSportageN语句后边的说话都不再举行。当在积攒进度中央银行使该语句时,能够钦定重回给调用应用程序、批管理或进度的整数值。假设RETU凯雷德N未钦命重回值,则存款和储蓄进度的重返值是0

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.';

结果如图所示
图片 31
当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

结果如图所示
图片 32

3.8.TTiguanY CATCH错误管理语句

一经TOdysseyY块内部发生错误,会将决定传递给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

奉行结果如图所示
图片 33
语句中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

结果如图所示
图片 34
寻常select语句无法推行。TOdysseyY CATCH语句的逻辑是,一旦T本田UR-VY语句块中出现难题讲话,立即跳转到CATCH语句块,T科雷傲Y语句块接下去的言辞不再实行。

4.常用函数

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

结果如图所示
图片 35
示例17:用CONVERT()函数将stu_birthday转化成钦定格式的日期
实践下列语句

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

结果如图所示
图片 36

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

其余常用函数太轻巧了这边不写了,略。

版权声明:本文由威尼斯人app发布于网站首页,转载请注明出处:《SQL Server 2008从入门到精通》--20180716