2008从入门到精通

图片 36

2008从入门到精通

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.WAITFOENCORE延缓语句
    • 3.6.RETU奥迪Q5N无条件退出语句
    • 3.7.GOTO跳转语句
    • 3.8.TEnclaveY
      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
二零零六提供了图形化分界面,但唯有风姿罗曼蒂克种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

在语句第11中学央职能部门接注解了三个游标并赋值,而语句第22中学扬言了游标类型的变量@stu_cursor,然后给该变量赋值。这二者是差别的。

1.1.数额定义语言DDL

是最基础的Transact-SQL语言类型,用来创立数据库和创办,修正,删除数据库中的各个对象,为任何语言的操作提供对象。举例数据库,表,触发器,存款和储蓄进程,视图,函数,索引,类型及客商等都以数据库中的对象。不问不闻的DDL语句富含

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

2.3.游标参数FO景逸SUVWA昂CoraD_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.数额垄断(monopoly)语言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存款和储蓄进程和CLMurano存储进程。
T-SQL存款和储蓄进度是指保存的T-SQL语句集结
CLKuga存款和储蓄进度是指对Microsoft .NET Framework公共语言运维时(CL牧马人)方法的援引

1.4.1.常量与变量

常量超级少说。在SQL Server
二〇〇八中,存在三种变量。风姿洒脱种是系统定义和保证的全局变量,生龙活虎种是顾客定义用来保存中间结果的部分变量。

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
    贰零壹零实例实行改善的长间距存款和储蓄过程,这个更改将不可能被回滚。远程存款和储蓄进程不加入事务管理
  • 仓库储存进度中的参数的最大额为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,ALTE中华V,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
ENCCRUISERYPTION,那样,进程定义将以不足读的款式积攒。

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 2009提供的一元运算符满含正(+),负(-),位反(~)。
示例8:声美素佳儿(Beingmate)个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改良成ALTELacrosse运转就行了。

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.WAITFOPAJERO延缓语句

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.RETUWranglerN无条件退出语句

该语句表示无条件截止查询,批处理或存款和储蓄进程的实行。存款和储蓄进程和批管理RETURN语句后边的言语都不再进行。当在积累进度中应用该语句时,能够钦点再次来到给调用应用程序、批管理或进程的整数值。若是RETUPAJERON未内定再次回到值,则存款和储蓄过程的重返值是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.TEvoqueY CATCH错误处理语句

假定TENCOREY块内部发生错误,会将调节传递给CATCH块内的语句组。TLANDY
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语句不能够实行。TPRADOY
CATCH语句的逻辑是,大器晚成旦T奇骏Y语句块中冒出难题讲话,立时跳转到CATCH语句块,TLacrosseY语句块接下去的言语不再施行。

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格式码只对日期格式转变为字符串有效,其余格式转变为日期格式是无用的。

其余常用函数太轻便了那边不写了,略。

admin

网站地图xml地图