第13章TransactSQL编程基础Word文档下载推荐.docx
- 文档编号:19466116
- 上传时间:2023-01-06
- 格式:DOCX
- 页数:17
- 大小:457.98KB
第13章TransactSQL编程基础Word文档下载推荐.docx
《第13章TransactSQL编程基础Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《第13章TransactSQL编程基础Word文档下载推荐.docx(17页珍藏版)》请在冰豆网上搜索。
通常情况下,局部变量在一个批处理(也可以是存储过程或触发器)中被声明或定义,然后该批处理内的SQL语句就可以设置这个变量的值,或者是引用这个变量已经被赋予的值。
当这个批处理结束后,这个局部变量的生命周期也就随之消失。
要创建局部变量,使用DECLARE语句,其语法如下:
DECLARE
{@local_variabledata_type|
@cursor_variableCURSOR
}[,…n]
主要参数说明如下:
●@local_variable是变量的名称,他必须以@开发。
●data_type是任何由系统提供的或用户定义的数据类型。
变量不能是text、ntext或image数据类型。
●table_type_definition用于定义表数据类型。
表声明包括列定义、名称、数据类型和约束。
允许的约束类型只包括PRIMARYKEY、UNIQUEKEY、NULL和CHECK。
●n表示可以指定多个变量并对变量赋值的占位符。
当声明表变量时,表变量必须是DECLARE语句中正在声明的变量。
声明局部变量后要给局部变量赋值,可以使用SET或SELECT语句:
SET@local_variable=expression
SELECT@local_variable=expression[,…n]
其中,@local_variable是除cursor、text、ntext、image外的任何类型变量名;
expression是任何有效的SQLServer表达式。
SELECT@lacol_variable通常用于将单个值返回到变量中,如果expression为列名,则返回多个。
如果SELECT语句返回多个值,将返回的最后一个值赋予变量。
如果SELECT语句没有返回行,变量将保留当前值。
如果expression是不返回值的子查询,则将变量设为NULL。
因此,通常情况下使用SET而不是SELECT给变量赋值。
例如,将局部变量hello声明为char类型,长度为20,并为其赋值为hello,world!
其SQL语句如下:
DECLARE@hellochar(20)
SET@hello='
hello,world!
'
13.2运算符
运算符实现运算功能,用来指定在一个或多个表达式中执行操作的符号,以产生新的结果。
在SQLServer2008中,运算符可以分为:
算术运算符、赋值运算符、位运算符、比较运算符、逻辑运算符、字符串连接运算符和一元运算符。
1.算术运算符
算术运算符是用于对两个表达式进行数学运算的运算符,一般得到的结果是数值型。
表4-2列出了SQLServer中的主要算术运算符。
表4-2算术运算符
运算符
说明
+
加法运算
-
减法运算
*
乘法运算
/
除法运算,如果两个表达式值都是整数,那么结果只取整数值,小数值将略去
%
取模运算,返回两数相除后的余数
例如下列T-SQL数学运算语句所示:
SELECT2.5+5.6'
加'
SELECT5.9-1'
减'
SELECT2.0*5.0'
浮点型乘'
SELECT2*5'
整数乘'
SELECT10.0/15.0'
浮点型除'
SELECT10/15'
整数除'
SELECT90/16'
取模'
在查询管理器中执行上述语句,运行结果如图4-2所示。
图4-2执行数学运算的结果
从上面执行的结果中可以看到,浮点型数值和整数型数值的乘除法运算得到的结果并不相同,这时因为,有浮点型数值的运算结果的类型是浮点型,而整数型数值运算结果的类型是整数,所以,整数型乘除只保留整数。
2.赋值运算符
在Transact-SQL语言中,赋值运算符只有等号“=”一个。
赋值运算符有两个主要的用途:
第一个是给变量赋值,如下语句所示。
DECLARE@URLvarchar(20)
SET@URL='
第二个是在WHERE子句中提供查询条件,如下语句所示:
SELECT*FROM学生信息
WHERE籍贯='
上海'
3.位运算符
位运算符在两个表达式之间执行位操作,这两个表达式可以是任意两个整数数据类型的表达式。
位运算符的符号及其定义如表4-3所示。
表4-3位运算符
描述
&
位与逻辑运算,从两个表达式中取对应的位。
当且仅当输入表达式中两个位的值都为1时,结果中的位才被设置为1,否则,结果中的位被设置为0
|
位或逻辑运算,从两个表达式中取对应的位。
如果输入表达式中两个位只要有一个的值为1时,结果的位就被设置为1,只有当两个位的值都为0时,结果中的位才被设置为0
^
位异或运算,从两个表达式中取对应的位。
如果输入表达式中两个位只有一个的值为1时,结果中的位就被设置为1;
只有当两个位的值都为0或1时,结果中的位才被设置为0
例如,下列语句分别计算2与51的位与、位或、位异或的运算结果。
SELECT5&
51'
位与'
SELECT5|51'
位或'
SELECT5^51'
位异或'
执行该语句,运算结果如图4-3所示。
图4-3执行位运算符的结果
在位与运算中,5的二进制值为0000000000000101,51的二进制值为0000000000110011。
根据位与运算规则,当且仅当输入的表达式中两个位的值都为1时,结果中的位才被设置为1;
否则,结果中的位被设置为0。
那么,5与51的位与逻辑运算值为0000000000000001,而二进制为0000000000000001的十进制值就是1。
4.比较运算符
比较运算符用来测试两个表达式是否相同。
除了text、ntext或image数据类型的表达式外,比较运算符可以用于所有的表达式。
比较运算符的符号及其表达式如表4-4所示。
表4-4比较运算符
=
等于
<
>
不等于
大于
!
小于
不小于
大于或等于
不大于
小于或等于
5.逻辑运算符
逻辑运算符用于对表达式或操作数进行比较或测试,其运算结果返回的是布尔类型的值,即true或false。
true表示条件成立,flase则表示条件不成立。
在Transact-SQL中可使用逻辑运算符如表4-5所示。
表4-5逻辑运算符
ALL
如果一组的比较都为true,则比较结果为true
AND
如果两个布尔表达式都为true,则结果为true;
如果其中一个表达式为false,则结果为false
ANY
如果一组的比较中任何一个为true,则结果为true
BETWEEN
如果操作数在某个范围之内,那么结果为true
EXISTS
如果子查询中包含了一些行,那么结果为true
IN
如果操作数等于表达式列表中的一个,那么结果为true
LIKE
如果操作数与某种模式相匹配,那么结果为true
NOT
对任何其他布尔运算符的结果值取反
OR
如果两个布尔表达式中的任何一个为true,那么结果为true
SOME
如果在一组比较中,有些比较为true,那么结果为true
例如,查询数据库“电子书查询系统”中会员所在地区为“北京”或者“上海”的会员,语句如下所示:
USE电子书查询系统
SELECT*
FROM会员信息
WHERE所在地区LIKE'
北京'
OR所在地区LIKE'
执行语句的结果如图4-4所示。
图4-4使用逻辑运算符查询结果
在该语句中,使用LIKE和OR逻辑运算符,表示如果数据中会员所在地区有北京或者上海的记录,那么就返回记录。
6.字符串运算符
加号(+)是字符串连接运算符,可以用他将字符串串联起来。
其他所有字符串操作都使用字符串函数(如SUBSTRING)进行处理。
默认情况下,对于varchar数据类型的数据,在INSERT或赋值语句中,空的字符串将被解释为空字符串。
在串联varchar、char或text数据类型的数据时,空的字符串被解释为空字符串。
例如,'
abc'
+'
'
def被存储为'
abcdef'
。
但是,如果兼容级别设置为65,则空常量将作为单个空白字符处理,'
+'
def'
将被存储为'
abcdef'
7.一元运算符
一元运算符表示只对一个表达式执行操作。
该表达式可以是numeric数据类型中的任何一种数据类型。
在Transact-SQL语言中的一元表达式如表4-6所示。
表4-6一元运算符
数值为正
数值为负
~
返回数字的逻辑非
8.运算符的优先级
当一个复杂的表达式有多个运算符时,运算符优先级决定执行运算的先后次序。
执行的顺序可能严重地影响所得到的值。
SQLServer2008中运算符优先级如表4-7所示。
在一个表达式中按先高后低的顺序进行运算(即数字越小其优先级越高)。
表4-7运算符优先级
优先级
1
~(位非)
2
*(乘)、/(除)、%(取模)
3
+(正)、-(负)、+(加)、(+连接)、-(减)、&
(位与)
4
=、>
、<
、>
=、<
、!
=、!
(比较运算符)
5
^(位异或)、|(位或)
6
7
8
ALL、ANY、BETWEEN、IN、LIKE、OR、SOME
9
=(赋值)
13.3表达式
表达式是符号与运算符的组合,由变量、常量、运算符、函数组成。
在T-SQL语句中,使用表达式可以为查询操作带来很大的灵活性。
它可以在查询语句中的任何位置使用,例如:
检索数据的筛选条件、指定数据的值。
根据表达式包含的内容,可以将表达式分为两种类型:
简单表达式和复杂表达式。
简单表达式是指仅由变量、常量、运算符、函数等组成的表达式。
简单表达式结构单一,一般用来描述一个简单的条件。
复杂表达式是指由两个或多个简单表达式通过运算符连接起来的表达式。
在复杂表达式中,如果两个或多个表达式有不同的数据类型,表达式中元素组合的顺序由表达式中运算符的优先级决定。
例如:
下面的复杂表达式,该表达式内包含有字段、字符串、逻辑运算符等。
该语句用来查询Reader表中名称为黄山,密码为123的用户信息。
程序如下:
SELECTB.Bnum,B.Bname,B.writer,BR.Rcert,Br.botime,R.Rcert,R.Rname
FROMBooksB,BorrowORreturnBR,ReaderR
whereB.Bnum=Br.BnumandBr.Rcert=R.Rcert
GO
执行该语句,运行结果如图4-5所示。
图4-5使用复杂表达式
构成简单表达式中元素的数据类型、排序规则、精度、小数位数和值就是它所引用元素的数据类型、排序规则、精度、小数位数和值。
使用比较运算符或逻辑运算符组合两个或多个表达式时,其结果为布尔型(Boolean),即TRUE、FALSE或UNKNOWN。
用算术运算符、位运算符或字符串运算符组合两个表达式时,生成的数据类型取决于运算符。
13.4注释
注释是程序代码中不被执行的文本字符串,用于对代码进行说明或暂时用来进行诊断的部分语句。
一般地,注释主要描述程序名称、作者名称、变量说明、代码更改日期、算法描述等。
在SQLServer2008系统中,支持两种注释方式,即双连字符(--)注释方式和正斜杠星号字符(/*…*/)注释方式。
在双连字符(--)注释方式中,从双连字符开始到行尾的内容都是注释内容。
这些注释内容既可以与要执行的代码处于同一行,也可以另起一行。
双连字符(--)注释方式主要用于在一行中对代码进行解释和描述。
当然,双连字符(--)注释方式也可以进行多行注释,但是每一行都须以双连字符开始。
服务器不对注释进行计算。
在正斜杠星号字符(/*…*/)注释方式中,开始注释对(/*)和结束注释对(*/)之间的所有内容均视为注释。
这些注释字符既可以用于多行注释,也可以与执行的代码处在同一行,甚至还可以处在可执行代码的内部。
服务器不计位于/*和*/之间的文本。
多行/*…*/注释不能跨越批。
整个注释必须包含在一个批内。
为了更好的说明双连字符(--)注释方式和正斜杠星号字符(/*…*/)注释方式的用法,下面将举出一个具体实例,程序如下:
--查看会员的信息
SELECT*FROM会员信息
/*
按照会员所在地区查询
查询地区为'
的客户信息
*/
SELECT*FROM会员信息WHERE所在地区='
执行语句的结果如图4-6所示。
图4-6在语句中使用注释
双连字符(--)注释方式和正斜杠星号字符(/*…*/)注释方式都没有注释长度的限制。
一般地,行内注释采用双连字符(--),多行注释采用正斜杠星号字符(/*…*/)注释方式。
13.5控制流程
在程序设计语言中,需要使用一些语句组织形式来控制程序的运行。
这些程序设计语言的基本结构分为顺序结构、条件分支结构和循环结构。
顺序结构是一种自然结构,条件分支结构和循环结构都需要根据程序的执行状况对程序的执行顺序进行调整和控制。
在Transact-SQL语言中,流程控制语句就是用来控制程序执行流程的语句,也称流控制语句或控制流语句。
下面将对主要的流程控制语句进行介绍。
1.BEGIN…END语句块
BEGIN…END可以定义Transact-SQL语句块,这些语句块作为一组语句执行,允许语句嵌套;
关键字BEGIN定义Transact-SQL语句的起始位置,END标识同一块Transact-SQL语句的结尾。
下面结合示例详细介绍关键字BEGIN…END,语法格式为:
BEGIN
{
sql_statement︱statement_block
}
END
上述语句中参数说明如下:
●sql_statement使用语句块定义的任何有效的Transact-SQL语句。
●statement_block使用语句块定义的任何有效的Transact-SQL语句块。
2.IF…ELSE条件语句
用于指定Transact-SQL语句的执行条件。
如果条件真,则执行条件表达式后面的Transact-SQL语句。
当条件为假时,可以使用ELSE关键字指定要执行的Transact-SQL语句。
他的语法格式为:
IFBoolean_expression
{sql_statement|statement_block}
ELSE
●Boolean_expression返回true或false的表达式。
如果布尔表达式中含有SELECT语句,必须用圆括号将SELECT语句括起来。
例如,使用IF…ELSE条件语句根据相应场馆的使用状态执行不用的Transact-SQL语句,具体代码如下所示:
USE体育场管理系统
IF(SELECT状态FROM场馆信息WHERE场馆名称='
足球场'
)='
空闲'
BEGIN
PRINT'
该场馆已经没人使用,可以出租'
SELECT*FROM场馆信息WHERE场馆名称='
PRINT'
该场馆已经有人预订了,非常抱歉'
执行上述语句,结果如图4-7所示。
图4-7使用IF…ELSE语句
3.CASE分支语句
CASE关键字可根据表达式的真假来确定是否返回某个值,可在允许使用表达式的任何位置使用这一关键字。
使用CASE语句可以进行多个分支的选择。
CASE具有两种格式:
●简单格式:
将某个表达式与一组简单表达式进行比较以确定结果。
●搜索格式:
计算一组布尔表达式以确定结果。
(1)简单CASE格式的语法如下:
CASEinput_expression
WHENwhen_expressionTHENresult_expression
[…n]
[ELSEelse_result_expression]
●input_expression使用简单CASE格式时所计算的表达式,可以是任何有效的表达式。
●when_expression用来和input_expression表达式做比较的表达式,input_expression和每个when_expression的数据类型必须相同,或者是隐性转换。
●result_expression当input_expression=when_expression的取值为true时,需要返回的表达式。
●else_result_expression当input_expression=when_expression的取值为false时,需要返回的表达式。
(2)搜索CASE格式的语法如下:
CASE
WHENBoolean_expressionTHENresult_expression
语句中参数的含义与简单CASE格式的参数含义类似。
4.WHILE循环语句
设置重复执行Transact-SQL语句或语句块的条件。
当指定的条件为真时,重复执行循环语句。
可以在循环体内设置BREAK和CONTINUE关键字,以便控制循环语句的执行过程。
他的语法格式如下:
WHILEBoolean_expression
{sql_statement|statement_block}
[BREAK]
{sql_statement|statement_block}
[CONTINUE]
●Boolean_expression布尔表达式,可以返回true或false。
●BREAK导致从最内层的WHILE循环中退出,将执行出现在END关键字后面的任何语句块,END关键字为循环结束标记。
●CONTINUE使WHILE循环重新开始执行,忽略CONTINUE关键字后的任何语句。
5.WAITFOR延迟语句
WAITFOR语句可以将他之后的语句在一个指定的间隔之后执行,或在将来的某一指定时间执行。
他可以悬挂起批处理、储存过程或事务的执行,直到发生以下情况为止:
已超过指定的时间间隔、到达指定的时间。
该语句是通过暂停语句的执行而改变语句的执行过程。
他的语法如下:
WAITFOR
DELAYtime|TIMEtime|(receive_statement)[TIMEOUTtimeout]
上述语句中参数说明如下:
●DELAY可以继续执行批处理、存储过程或事务之前必须经过的指定时段,最长可以24小时。
●Time要等待的时间。
可以使用datetime数据可接受的格式之一指定time,也可以将其指定为局部变量,不能指定日期。
因此,不允许指定datetime值的日期部分。
●TIME指示SQLServer等待到指定时间。
●receive_statemen任何有效的RECEIVE语句。
例如下面的示例使用TIME关键字等到晚上10点执行【体育场管理系统】数据库检查来确保所有页已正确分配和使用:
WAITFORTIME'
22:
00'
DBCCCHECKALLOC
6.RETURN无条件退出语句
无条件终止查询、存储过程或批处理的执行。
存储过程或批处理中RETURN语句后面的所有语句都不在执行。
当在存储过程中使用该语句时,可以使用该语句指定返回给调用应用程序、批处理或过程的整数值。
如果RETURN语句未指定值,则存储过程的返回值是0。
RETUREN[integer_expression]
上述语句中integer_expression参数返回一个整数值。
存储过程可向执行调用的过程或应用程序返回一个整数值。
7.GOTO跳转语句
使得Transact-SQL批处理的执行跳至指定标签的语句。
也就是说,不执行GOTO语句和标签之间的所有语句。
由于该语句破坏了结构化语句的结构,应该尽量减少该语句的使用。
GOTOlabel
这里的Label参数指定要跳转到的
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第13章 TransactSQL编程基础 13 TransactSQL 编程 基础