配色: 字号:
《SQLServer2005数据库案例教程》第3章Transact-SQL程序设计
2023-05-23 | 阅:  转:  |  分享 
  
第3章 Transact-SQL程序设计 SQL Server 2005中唯一指定的编程语言是Transact-SQL语言,这是一种非
过程化的编程语言。不论是基于C/S(客户/服务器)的应用程序,还是基于B/S(浏览器/服务器)的Web应用程序,都必须通过向服务器
发送Transact-SQL语言才能实现与SQL Server的数据库进行通信。 使用Transact-SQL语言操作时,与S
QL Server通信的所有应用程序都是必须通过向服务器发送Transact-SQL语句来进行,而与应用程序的界面无关。Trans
act-SQL语言的特点: 1.一体化的特点。Transact-SQL语言及数据定义语言、数据操纵语言、数据控制语言和附
加语言元素(包括变量、运算符、函数、流程控制语句和注释等)为一体。 2.两种使用方式,统一的语法结构。两种使用方式即联机
交互式和嵌入式高级语言的使用方式。 3.高度非过程化。Transact-SQL语言一次能处理一个或多个记录,所有的SQL
语句接受集合作为输入,返回集合作为输出,并允许一条SQL语句的结果作为另一条SQL语句的输入。另外,Transact-SQL语言不
要求用户指定对数据的存放方法,所有的Transact-SQL语句使用查询优化器,用以指定数据以最快速度存取的手段。 4.
类似于人的思维习惯,容易理解和掌握。在Transact-SQL语言中对标准的SQL语句畅通无阻。 Transact-SQL 对SQ
L 语言做了许多扩充,具体分类如下: 变量说明:用来说明变量的命令。 数据定义语言(DDL,Data Defi
nition Language):用来建立数据库、数据库对象和定义其列,大部分是以CREATE 开头的命令,如:CREATE TA
BLE 、CREATE VIEW 、DROP TABLE 等。 数据操控语言(DML,Data Manipulation
Language):用来操纵数据库中的数据的命令,如:SELECT、 INSERT、 UPDATE 、DELETE 、CURSO
R等。 数据控制语言(DCL,Data Control Language):用来控制数据库组件的存取许可、存取权限等的命
令。如GRANT、 REVOKE 等。 流程控制语言(Flow Control Language):用于设计应用程序的语
句如IF、WHILE、CASE等。 函数:执行特殊运算的命令。 其他命令:嵌于命令中使用的标准函数。
3.1 常量和变量 SQL Server 2005中的Transact-SQL与其它程序设计语言一
样,在进行程序设计时会用到一些数据,数据有两个属性:型和值,型是指数据的分类,即数据类型;值是指数据的具体表示,即数值。这些数据的
值可能会是确定的,也可能是不确定的,甚至数据的值在程序的运行过程中也会不断的发生变化,这就是所谓的常量和变量,本节主要讲解Tran
sact-SQL语言中的常量和变量的使用及其语法规则,并通过一些简单易懂的实例,来帮助读者加快理解常量和变量的实质。3.1.1 案
例实现过程【技术要点】通过“开始—程序”菜单找到Microsoft SQL Server 2005的子菜单,点击SQL Serve
r Management Studio并打开其主窗口,此时会弹出一个连接服务器的对话框,点击对话框上的“连接”按钮,从而实现数据库
的连接。在本案例中将采用如下步骤来逐步阐述常量和变量的使用。 (1)Transact-SQL语言程序设 计,需要在查询编辑
器主窗口中 进行,查询编辑器是SQL Server 2005专为Transact-SQL语言提供的 集编
辑、调试、结果打印输出等 功能的窗口部件。点击SQL Server Management Studio主窗口中的“
文件”菜单下面的“新建查询” 按钮,如图3.2所示,打开查询编 辑器主窗口。


图3.2 “新建查询”对话框
2. 执行步骤(1)后会打开一个新的查询编辑器窗口,即可进行Transact-SQL编程;当然也可通过快捷键“Alt+N” 打开
一个新的查询编辑器窗口。如图3.3所示。

图3.3 查询编辑器主窗口 (3)查询编辑器主窗口中由一个光标在闪烁,此时就可以在打开的查询编辑
器主窗口中就进行编写代码。 【例3.1】使用Transact-SQL语句,查询课程表中前三条记录,并把它们的学分减1
,要求打印输出结果。 Transact-SQL代码清单如下。 USE 教学管理系统 --打开数据
库 GO --批处理结束命令 SELECT TOP(3) FROM 课程表
--查询课程表中前三条记录 SELECT TOP(3) 课程编号,课程名, 学分-1 AS 学分FROM 课程表
--查询学分减1后课程表中前三条记录 在【例3.1】中第1个SELECT作用是查询课程表中的前三条记录,第2个SELE
CT查询的是课程表中的前三条记录,并在原来的基础上,把学分减1,这里的“1”即为整型常量。【例3.1】代码执行后的结果如图3.4所
示。图3.4 常量的使用 【例3.2】使用Transact-SQL语句,实现查询教师表中计算机系教师的全部信息,要求打印输
出结果。 Transact-SQL代码清单如下。 USE 教学管理系统 --打开数据库 GO --批处理结束命令
DECLARE @AA char(8) --声明局部变量 SET @AA=''计算机系''
--初始化变量 SELECT FROM 教师表 WHERE 所在部门=@AA
--SQL语句 在【例3.2】中定义了一个局部变量@AA
,在SELECT查询中引用了此 局部变量。从此例中可以看出局部变量在使用时必须在其前面冠以“@”符号。【例3.2】代码执行后,
运行的结果如图3.5所示。
图3.5 局部变量的使用 而全局变量的使用与局部
变量有所不同,其最大的特点是必须在全局变量前面冠以“@@”。 例如,@@VERSION 全局变量表示返回当前安装的SQ
L Server的日期、版本、处理器,而@@COMMECTIONS全局变量表示自SQL Server最近一次启动以来,连接或企图连
接到SQL Server的连接数目。使用SELECT执行全局变量@@COMMECTIONS 和@@CONNECTIONS即可返回其
值。如图3.6所示
图3.6 全局变量的使用3.1.2相关知识及
注意事项1. 常量 常量是在程序运行中值不发生变化的量,常量的格式取决于它所表示的数据类型。根据常见的数据类型,分为字
符串常量、整型常量、实型常量、货币常量和日期时间常量。下面举例说明一些常见的常量的使用方法。 1) 字符串常量
(1)ASCII字符串常量 (2)Unicode字符串常量 2) 整型常量 整型常量由数字0
~9以及+/-号组成的有意义的串。如123、-9811、+89。 3) 实型常量
实型常量有定点和浮点两种表示形式。 (1)定点实型常量 由数字0~9、小数点和正负号组成有意义的串。如1.0、
3467.584。 (2)浮点实型常量 由数字0~9、小数点、正负号和字母E组成有意义的串。如0.68E+3、1E10
、-23E2。 4) 货币常量 货币常量是以$符号为前缀的整型或实型常量,用来表示货币值,精度为4位小数。如
$100、-$52、$16.37。 5) 日期时间常量 日期常量是用单引号括起来的有效的日期和时间组成的字
符串。 (1)常见的日期格式 ''September1、2007''、''2007年9月1号''、''20
07-09-01''、''09/01/2007''、''20070901'' (2)常见的时间格式 ''14
:12:00''、''02:12PM''2. 变量 变量是程序设计语言中必不可少的组成部分,在Transact-SQL语言中
,变量被分为两种形式:局部变量(Local Variable)和全局变量(Globle variable),局部变量是由用户定义和
维护,而全局变量则是由系统提供的。 1)局部变量 局部变量是一个能够拥有特定数据类型的对象,它的作用范围仅
限制在一定的范围之内,通常用来存储从表中查询到的数据,或当作程序执行过程中的暂存变量。2)全局变量 全局变量是SQL
Server 系统内部使用的变量,其作用范围并不仅仅局限于某一程序或处理,而是任何程序均可随时调用,全局变量的值不能使用SET或者
SELECT语句来改变。全局变量通常存储一些SQL Server的配置设定值和效能统计数据,可以将全局变量的值赋给局部变量,以便保
存和处理。用户可在程序中用全局变量来测试系统的设定值或Transact-SQL命令执行后的状态值。 在SQL Serv
er 2005中,全局变量可以看成是一组特殊的函数,它们的名称以@@开头,而且不需要任何参数,在调用时无需在函数名后面加上一对圆括
号,这些函数也称为无参函数。 全局变量是SQL Server管理的变量,用户虽然可以查看全局变量的值,但不能建立全局变
量,更不能改变全局变量的值。 全局变量分为两类:一类反映SQL Server系统的全局变量,另一类反映与一个连接有关的
全局变量。 3.2 数据类型和运算符 数据类型是数据的一个属性,决定着数据的存储方式和使用
的方法,即限制了数据库表中一个字段所能保存的数值,以及参数或变量中所能存储的信息的类型。例如,两个实数可以进行乘法运算,但两个字符
型数据却不能做乘法运算。 运算符是一些符号,用于在常量、变量和函数之间进行某种操作。他们能够用来执行算术运算、字符串连
接、赋值以及在字段、常量和变量之间进行比较。将数据类型指定的数值与相应的运算符结合起来构成表达。大多数Transact-SQL语句
并不明确指定数据类型,但SQL语句中各对象数据类型的作用结果,将直接影响各个语句的运行结果,从而可能导致与程序设计时的预期有偏差。
【案例说明】 在SQL Server 2005中,每个字段(即列值)、局部变量、表达式和参数都具有一个相关的数据类型,
并且通过与运算符的连接,执行相应的运算之后,得到一个表达式的结果。 【例3.5】使用Transact-SQL语句,实现查询
学生信息表中的学生的学号、姓名、年龄、专业等信息,并打印输出相关信息。Transact-SQL代码清单如下。 /文件名
:Demo1-1.sql 作者:陈洁 日期:2010-04-18/ USE 教学管理系统
--打开数据库 GO SELECT 学号,姓名,性别,年龄=DATEDIFF(
year,出生日期,GETDATE()),专业 from 学生表
--DATEDIFF()函数用来计算年龄 在【例3.5】中放在“/”和“/”内的文本为块注释,以“--”开始的文本为行
内注释。DATEDIFF()函数带有三个参数,其中第三个参数获得当前的时间,并与第二个参数相减,第一个参数year表示截取第二个参
数与第三个参数运算结果中的年部分的数据,从而实现了年龄的计算,运行结果如图3.9所示。 在【例3.5】中使用到了DA
TEDIFF()函数,对于函数的具体使用方法,可参阅本书的有关附录。
图3.9 注释符的使用 将【例3.5】中
代码进行修改为【例3.7】代码中代码,执行后的结果如【例3.7】中的代码所示。 【例3.7】使用Transact-SQL
语句,实现把学生信息表中的学生的年龄全部加1,并打印输出相关信息。 Transact-SQL代码清单如下。
/文件名:Demo1-1.sql 作者:陈洁 日期:2010-04-18/ USE
教学管理系统 --打开数据库 GO -
-批处理结束语句 DECLARE @num int --定义局部变量 SELECT 学号,姓名,
性别,年龄=(DATEDIFF(year,出生日期, GETDATE())) +1,专业from 学生表
--查询学生表,并把学生年龄都加1 SET @num=(SELECT count(学号) from 学生表)
--查询学生表中的学生个数,并把它赋局部给变量@num
/用字符串连接运算符’+‘,把中文字符串常量和CAST函数转换过来的数字字符串连接起来,并用PRINT语句输出运算后的字符串
/ PRINT ''共有''+CAST(@num AS char(2))+''个学生年龄加1!'' 【例3.7】
代码运行后效果如图3.10所示,图左边的是SELECT查询语句运行的结果,图右边的是消息标签下的内容,即PRINT语句输出的结果。
图3.10 运算符的使用3.2.2 相关知识及注意事项1.数据类型 1) 精确数字类型 a.整数类型 i
nt数据类型是SQL Server 2005中的主要整形数据类型,bigint 数据类型用于整数数值可能超过int数据类型支持范围
的情况。实际使用中,要根据所存储数据的最大范围来选择。使用整型的精确数字类型如表3-3所示。 表3-3 使用整型的精确数字类
型续表 b.逻辑数据类型 bit是可以取值为1、0或NULL的整型数据类型。SQL Server 2005优化了
bit列的存储。如果表中的列为8bit或更少,则这些列作为1 Byte存储。如果列为9到16bit,则这列作为2Byte存储,依此
类推。可将只有两个值的数据定义为bit类型,即只存储1或0的整数数据。 c.decimal和numeric dec
imal和numeric为带固定精度和小数位数的数值数据类型。使用最大精度时,有效值从-10^38+1~10^38-1,decim
al在SQL-92中的同义词为dec和dec(p,s)。numeric在功能上等价于decimal。 d.money和sma
llmoney 货币数据类型用于存储货币值,在使用货币类型时,应在数据前加上货币符号系统才能辨识其为哪国的货币,如果不加
上货币符号,则默认为“¥”。 Money和smallmoney代表货币或货币值的数据类型,数据类型精确到它们所代表的货币
单位的万分之一,即货币类型数据实际上是带有4位小数的Decimal类型数据。在Money和smallmoney类型的字段中输入货币
数据时必须在数值前加一个货币符号(如:美圆$)。输入负值时应当在货币符号后面加“-”,输入过程中不需要每3位添加一个逗号来分隔,但
是打印的时候会自动添加。表3-5为货币数据类型表示的范围以及存储的字节数。表3-5 货币数据类型 2) 近似数字类型
用于表示浮点数值数据的类型为大数值数据类型。浮点数据为近似值,因此,并非数据类型范围内的所有值都能精确的表示。 3) 日期和
时间类型日期和时间的数据类型分为datetime和smalldatetime两种,分别用于表示某天的日期和时间 4) 字符数据类
型字符数据类型是使用最多的数据类型,它可以用来存储各种字母、数字符号、特殊符号。 5) 二进制数据类型二进制数据类型是用来存储固
定长度的binary数据类型。 6) 其他类型 (1)游标cursor (2)timestamp (3)sql_varia
nt (4)table (5)xml 7) 用户自定义类型 可以从基本数据类型创建别名类型数据。这使程序员能更容
易地理解该数据类型的用途。例如CREATE TYPE birthday FROM datetime NULL,接下来就可以使用br
ithday来定义数据对象了。2.运算符 在SQL Server 2005中,运算符主要有六大类:算术运算符、赋值运算
符、位运算符、比较运算符、逻辑运算符、字符串串联运算符、 3. 注释符1)行内注释 行内注释符用“--”表示。2)块注释符
块注释符用“/”开始,以“/”结尾,而且必须是成对出现。4. 通配符 通配符指“%”、“_”、“[]”和“[^]”5
. 表达式 表达式是标识符、值和运算符的组合,可以对其求值以获取结果。 表达式可以是下列任何一种:常量、函数、列名、变量
、子查询、CASE、NULLIF或COALESCE,还可以用运算符对这些实体进行组合以生成表达式。
3.3 流程控制语句 Transact-SQL 提供了控制语句,用于控制Transact-SQL语句、语句块和存储过程等
程序的执行和流程分支的命令。Transact-SQL控制流语言的使用与其他高级程序设计语言基本相似,如条件控制语句和循环语句。使用
这些语句命令,可以使程序更具有结构性和逻辑性,并可完成较复杂的操作。Transact-SQL的控制流语句不能跨越多个批处理或存储过
程。2.2.2 相关知识及注意事项 在Transact-SQL语言中,流程控制语句主要有语句块、条件选择语句、分支处理语句、循环语
句、返回语句、转移语句、打印输出语句等,表3-12列出了常用流程控制语句及其功能能。1.BEGIN…END 在条件语句和循环
语句等流程控制中,当要执行两个或两个以上的Transact-SQL语句时,就需要使用BEGIN…END语句。2.IF…ELSE
在程序中,经常需要根据特定条件指示SQL Server执行不同的操作和运算,也就是必须进行的所谓流程控制。3.WHILE…CO
NTINUE…BREAK 在程序中当需要多次重复处理某项工作时,就需要使用WHILE循环语句,WHILE语句通过条件表达式来
设置一个循环条件,当条件为真时,重复执行一个语句序列,否则退出循环,继续执行后面的语句。4.CASE CASE表达式用于简化
SQL表达式,它可以用在任何允许使用表达式的地方并根据条件表达式值的不同而返回对应的结果,如果哪个条件都不满足,则返回ELSE分支的结果。1) 简单CASE2) 搜索CASE表达式5.RETURN RETURN 语句无条件终止查询、存储过程或批处理。在存储过程或批处理中,RETURN语句后面的语句都不执行,返回到上一个调用它的程序或其他程序。6.批处理 批处理就是一个或多个Transact-SQL语句的集合,这些语句作为一个组从应用程序一次性提交给SQL Server并由SQL Server编译成一个可执行单元,此单元称为执行计划。执行计划中的语句每次执行一条。7.WAITFOR语句 WAITFOR语句可以暂时停止执行程序一段时间,直到所设定的时间已过或者所设定的时间已到才继续执行。8.其他语句命令1) BACKUP 和RESTORE 备份和恢复数据库。详情请参阅本书“数据库的备份还原于数据传输”的章节。2) USE 指定当前数据库3) EXECUTE(EXEC) 执行SQL字符串或存储过程。5) SHUTDOWN 关闭数据库服务器,其语法为: SHUTDOWN[ WITH MOWAIT]. WITH NOWAIT:可选参数,不对每个数据库执行检查点操作,在尝试终止全部用户进程后即退出。服务器重新启动时,将针对未完成事务执行回滚操作。
献花(0)
+1
(本文系昵称1689447...原创)