manbet手机客户端3.0《SQL Server 2008起入门到精通》–20180716

发布时间:2018-11-15  栏目:SQL  评论:0 Comments

1.锁

当多独用户同时对同一个数码开展改动时见面出并发问题,使用工作就可化解者问题。但是为了以防万一其他用户修改外一个还并未成功的作业中的数量,就得在工作中因故到锁。
SQL Server
2008资了余锁模式:排他锁,共享锁,更新锁,意向锁,键范围锁,架构锁和死容量更新锁。
查询sys.dm_tran_locks视图可以快捷了解SQL Server 2008内之加锁情况。

SELECT * FROM sys.dm_tran_locks;

流淌:关于锁之知识书中尚无仔细讲,将当事后的博客中上。

目录

2.游标

游标是近乎于C语言指针一样的布局,是同一种植多少访问机制,允许用户访问单独的数据行。游标主要出于游标结果集和游标位置组成。游标结果集是概念游标的SELECT语句返回行的汇聚,游标位置是凭于这结果集中某平等实行的指针。
示例1:用游标检索出student表中每行记录
Student表记录如图所示
manbet手机客户端3.0 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--释放游标资源

结果如图所示
manbet手机客户端3.0 2

  • 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.WAITFOR延迟语句
    • 3.6.RETURN无条件退出语句
    • 3.7.GOTO跳转语句子
    • 3.8.TRY
      CATCH错误处理语句
  • 4.时因此函数
    • 4.1.数据类型转换函数

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

游标定义参数LOCAL表示该游标只能作用被此次批处理要函数或存储过程。游标定义参数GLOBAL表示该游标可以作用为大局。
施行下列语句

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

施行结果如下
manbet手机客户端3.0 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
2008供了图形化界面,但单纯发生平等栽Transact-SQL语言会一直和数据库引擎进行互。根据实施效力特色可以将Transact-SQL语言分成3非常接近:数据定义语言DDL,数据操纵语言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中直接声明了一个游标并赋值,而告句2中声称了游标类型的变量@stu_cursor,然后让该变量赋值。这两边是见仁见智之。

1.1.数额定义语言DDL

是不过基础的Transact-SQL语言类,用来创造数据库及创,修改,删除数据库被的各种对象,为其他语言的操作提供靶。例如数据库,表,触发器,存储过程,视图,函数,索引,类型及用户等还是数据库被之对象。常见的DDL语句包括

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

2.3.游标参数FORWARD_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表中之数码如图所示
manbet手机客户端3.0 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

结果如图所示
manbet手机客户端3.0 5

1.3.数据控制语言DCL

涉嫌到权力管理之言语称为数据控制语言,主要用以实践有关安全治本的操作。如与权限(GRANT),收回权限(REVOKE),拒绝与主体权限,并防止主体通过组或者角色成员持续权限(DENY

3.仓储过程

储存过程是一样组用于完成一定功能的语句集,经过编译后存储在数据库被。在SQL
Server 2008面临,既好就此T-SQL编写存储过程,也足以用CLR编写存储过程。

1.4.Transact-SQL言语功底

3.1.用户定义的存储过程

该种存储过程是借助封装了可是选用代码的模块或者经过,有2栽类型:T-SQL存储过程以及CLR存储过程。
T-SQL存储过程是依保存之T-SQL语句集合
CLR存储过程是恃对Microsoft .NET Framework公共语言运行时(CLR)方法的援

1.4.1.常量与变量

常量不多说。在SQL Server
2008惨遭,存在个别栽变量。一栽是网定义和保安的全局变量,一种是用户定义用来保存中间结果的有些变量。

3.2.扩张存储过程

扩张存储过程是恃可动态加载与运作的DLL,允许采取编程语言(如C语言)创建自己的表例程。扩展存储过程一直当SQL
Server 2008之实例的地方空间中运行,可以采用SQL
Server扩展存储过程API完成编程。

1.4.1.1.系统全局变量

网全局变量分为两分外接近,一看似是和本SQL
Server连接或跟目前处理有关的全局变量,如@@Rowcount表示最近一个讲话影响之行数。@@error代表保留最近执行操作的缪状态。一类是和一切SQL
Server系统有关的全局变量,如@@Version意味着手上SQL Server的版本信息。

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

结果如图所示
manbet手机客户端3.0 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

结果如图所示
manbet手机客户端3.0 7

3.3.1.开立存储过程规则

每当设计以及创存储过程不时,应该满足一定的格与规则。

  • CREATE
    PROCEDURE定义自己可以包随机数量和品种的SQL语句,但下表中之话语除外。不可知当囤过程的外位置使这些话语。
  • 可引用在合存储过程遭到开创的对象,只要引用时曾开立了拖欠目标
  • 好在仓储过程外援临时表
  • 倘当储存过程遭到创造了本地临时表,该临时表仅为该存储过程要在,退出该存储过程后,该临时表会消失
  • 如果实施的仓储过程调用了另外一个囤过程,被调用的存储过程得看第一个存储过程的备目标,包括临时表
  • 假如实施针对长途SQL Server
    2008实例进行改动的长距离存储过程,这些反将不能够于回滚。远程存储过程未参与事务处理
  • 储存过程遭到的参数的极致充分数据也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,ALTER,EXECUTE,DROP,DBCC或动态SQL语句)的目标名应当据此该对象架构的称谓来界定。

2.1.算数运算符

每当SQL Server
2008遭到,算数运算包括加(+)减(-)乘(*)除(/)取模(%)。举一个简单易行的例证。
示例1:在Student表中上加同排,列名为stu_age,根据Student表的stu_birthday列计算stu_age列并插入数据。(演示插入整列数据的不二法门)
Student表数据如图所示
manbet手机客户端3.0 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

结果如图所示
manbet手机客户端3.0 9

3.3.3.加密存储过程的概念

如若要创建存储过程并确保其他用户无法查看该存储过程的概念,则可以使用WITH
ENCRYPTION,这样,过程定义将为不足读之花样储存。

2.2.赋值运算符

纵使当号(=),将表达式的值与另一个变量。举一个概括的事例。
示例2:计算Student表中学生的平分入学成绩并打印。
Student表的多寡如图所示,stu_enter_score列存放了学员的入学成绩
manbet手机客户端3.0 10
尽下的言语

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

结果如图所示
manbet手机客户端3.0 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 异或

结果如图所示
manbet手机客户端3.0 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表的数据如图所示
manbet手机客户端3.0 13
实施下列语句

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

结果如果下图所示
manbet手机客户端3.0 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表的多少如图所示
manbet手机客户端3.0 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'

结果如图所示
manbet手机客户端3.0 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列(入学成绩)数据如图所示
manbet手机客户端3.0 17
实施下的话语

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

结果如图所示
manbet手机客户端3.0 18

3.4.2.翻存储过程

好经下系统存储过程要目录视图查看存储过程的概念

2.6.连接运算符

加号(+)是字符串连接运算符,可以用它把字符串串连起来,在示例4的十进制转二迈入制函数惨遭,就就此上了加号。
示例7:将Student表的stu_name列和stu_enter_score列放在同样列显示,列名为score
Student表的数如图所示
manbet手机客户端3.0 19
履下列语句

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

尽结果如图所示
manbet手机客户端3.0 20

注:stu_enter_score列数据类型为int,加号只针对字符串类型数据中,因此而用CAST函数将stu_enter_score的数据类型转换为varchar(3),这样才会实现字符串拼接。

3.4.2.1.图形化界面

如下图
manbet手机客户端3.0 21

2.7.平头条运算符

如出一辙头运算符只对一个表达式执行操作,该表达式可以是数字数据类型中之其他一样种植多少类。SQL
Server 2008提供的等同长运算符包含正(+),负(-),位反(~)。
示例8:声明一个int数据类型变量@num并赋值,对该变量做正负位反操作。
实践下列语句

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

结果如图所示
manbet手机客户端3.0 22

流淌:位反操作符用于得一个数的补数,只能用来整数。

3.4.2.2.系统存储过程sp_helptext查看存储过程定义

履行下列语句

EXEC sp_helptext 'alter_data'

结果如图所示
manbet手机客户端3.0 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

结果如图所示
manbet手机客户端3.0 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'

结果如图所示
manbet手机客户端3.0 25

3.操纵语句

3.4.2.4.目录视图查看存储过程

行下列语句

SELECT * FROM sys.procedures

结果如图所示
manbet手机客户端3.0 26

3.1.BEGIN END语句块

BEGIN END可以定义SQL
Server语句块,使这些话作为同样组报告句执行,允许告诉句嵌套。举例请见示例4

3.4.3.改动存储过程

ALTER
PROCEDURE
告诉句修改存储过程,只需要将地方示例中之CREATE修改成ALTER运行就尽了。

3.2.IF ELSE语句块

用来指定T-SQL语句的实行标准,若条件吧确实,则履行基准表达式后面的言辞,条件为假时,可以试用ELSE关键字指定要实施的T-SQL语句。举例请见示例4

3.4.4.刨除存储过程

实践下列语句删除存储过程

DROP PROCEDURE alter_data

3.3.CASE分支语句

示例10:将Student表的学习者,性别与籍贯打印出,要求籍贯只能显示省内,省外或自治区。
Student表的多寡如图所示
manbet手机客户端3.0 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

结果如图所示
manbet手机客户端3.0 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

结果如图所示
manbet手机客户端3.0 29

3.5.WAITFOR延语句子

WAITFOR延迟语句可以叫于她今后的语句以一个指定的随时或者时间间隔后实施,可以悬挂于批处理,存储过程要业务的履。
示例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

manbet手机客户端3.0 30

3.6.RETURN无条件退出语句

该语句表示无条件停止查询,批处理还是存储过程的履。存储过程以及批判处理RETURN语句后面的语都不再实行。当于蕴藏过程被使用该语句时,可以指定返回给调用应用程序、批处理要过程的整数值。如果RETURN未指定返回值,则存储过程的返回值是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.';

结果如图所示
manbet手机客户端3.0 31
当Counter=4时,执行GOTO语句输出Branch
One,执行完毕这个话之后就是打破了WHILE循环,接着执行Branch_One语词被的GOTO,输出Branch
Three,结束。

横流:在WHILE循环中使GOTO会打破循环。

示例14:用GOTO语句实现示例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

结果如图所示
manbet手机客户端3.0 32

3.8.TRY CATCH错误处理语句

假使TRY块内部生误,会将控制传递让CATCH块内的语句组。TRY
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

实行结果如图所示
manbet手机客户端3.0 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

结果如图所示
manbet手机客户端3.0 34
正常select语句无法履行。TRY
CATCH语句的逻辑是,一旦TRY语句子块被起问题讲话,立刻跳反到CATCH语句块,TRY语句块接下的语不再实行。

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

结果如图所示
manbet手机客户端3.0 35
示例17:用CONVERT()函数将stu_birthday转化成指定格式的日子
实施下列语句

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

结果如图所示
manbet手机客户端3.0 36

流动:在上述代码中,CONVERT(DATE,stu_birthday,101)这么形容是没因此底。101格式码只对日期格式转化为字符串有效,其他格式转化为日期格式是杯水车薪的。

另常用函数太简单了这边不写了,略。

留下评论

网站地图xml地图