Transact-SQL语言如何定义变量、while循环语句。

4.1.2  Transact-SQL附加语言
Transact-SQL附加语言元素不是SQL的标准内容,而是Transact-SQL语言为了编程方便而增加的语言元素。这些语言元素包括变量、运算符、函数、流程控制语句和注释等内容。

1. 变量
变量对于一种语言来说是必不可少的组成部分。Transact-SQL语言允许使用两种变量:一种是用户自己定义的局部变量(Local Variable),另一种是系统提供的全局变量(Global Variable)。

(1)   局部变量

局部变量使用户自己定义的变量,它的作用范围近在程序内部。通常只能在一个批处理中或存储过程中使用,用来存储从表中查询到的数据,或当作程序执行过程中暂存变量使用。局部变量使用DECLARE语句定义,并且指定变量的数据类型,然后可以使用SET或SELECT语句为变量初始化;局部变量必须以“@”开头,而且必须先声明后使用。其声明格式如下:



DECLARE @变量名 变量类型[,@变量名 变量类型…]



其中变量类型可以是SQL Server 2000支持的所有数据类型,也可以是用户自定义的数据类型。

局部变量不能使用“变量=变量值”的格式进行初始化,必须使用SELECT或SET语句来设置其初始值。初始化格式如下:



SELECT @局部变量=变量值

SET @局部变量=变量值



比如在pubs数据库中使用名为@find的局部变量检索所有姓以Ring开头的作者信息,代码如下:



USE pubs

DECLARE @find varchar(30)

SET @find = 'Ring%'

SELECT au_lname, au_fname, phone

FROM authors

WHERE au_lname LIKE @find



执行结果:



au_lname                                 au_fname             phone        

---------------------------------------- -------------------- ------------

Ringer                                   Albert               801 826-0752

Ringer                                   Anne                 801 826-0752



注意:如果声明字符型的局部变量,一定要在变量类型中指明其最大长度,否则系统认为其长度为1。

(2)   全局变量

全局变量是SQL Server 2000系统内部使用的变量,起作用范围并不局限于某一程序,而是任何程序均可随时调用。全局变量通常存储一些SQL Server 2000的配置设置值和效能统计数据。用户可在程序中用全局变量来测试系统的设定值或者Transact_SQL命令执行后的状态值。引用全局变量时,全局变量的名字前面要有两个标记符“@@”。不能定义与全局变量同名的局部变量。从SQL Server 7.0开始,全局变量就以系统函数的形式使用。全局变量的符号及其功能如表4.1所示。

表4.1  全局变量及其功能

全局变量
功  能

@@CONNECTIONS
自SQL Server 2000最近一次启动以来登录或试图登录的次数

@@CPU_BUSY
自SQL Server 2000最近一次启动以来CPU Server的工作时间

@@CURRSOR_ROWS
返回在本次连接最新打开的游标中的行数

@@DATEFIRST
返回SET DATEFIRST参数的当前值

@@DBTS
数据库的惟一时间标记值

@@ERROR
系统生成的最后一个错误,若为0则成功

@@FETCH_STATUS
最近一条FETCH语句的标志

@@IDENTITY
保存最近一次的插入身份值

@@IDLE
自CPU服务器最近一次启动以来的累计空闲时间

@@IO_BUSY
服务器输入输出操作的累计时间

@@LANGID
当前使用的语言的ID

@@LANGUAGE
当前使用语言的名称

@@LOCK_TIMEOUT
返回当前锁的超时设置

@@MAX_CONNECTIONS
同时与SQL Server 2000相连的最大连接数量

@@MAX_PRECISION
十进制与数据类型的精度级别

@@NESTLEVEL
当前调用存储过程的嵌套级,范围为0~16

@@OPTIONS
返回当前SET选项的信息

@@PACK_RECEIVED
所读的输入包数量

@@PACKET_SENT
所写的输出包数量

@@PACKET_ERRORS
读与写数据包的错误数

@@RPOCID
当前存储过程的ID

@@REMSERVER
返回远程数据库的名称

@@ROWCOUNT
最近一次查询涉及的行数

@@SERVERNAME
本地服务器名称

@@SERVICENAME
当前运行的服务器名称

@@SPID
当前进程的ID

@@TEXTSIZE
当前最大的文本或图像数据大小


                                                                                   续表

全局变量
功  能

@@TIMETICKS
每一个独立的计算机报时信号的间隔(ms)数,报时信号为31.25ms或1/32s

@@TOTAL_ERRORS
读写过程中的错误数量

@@TOTAL_READ
读磁盘次数(不是高速缓存)

@@TOTAL_WRITE
写磁盘次数

@@TRANCOUNT
当前用户的活动事务处理总数

@@VERSION
当前SQL Server的版本号


2. 流程控制语句
Transact-SQL语言提供了一些可以用于改变语句执行顺序的命令,称为流程控制语句。流程控制语句允许用户更好地组织存储过程中的语句,方便地实现程序的功能。流程控制语句与常见的程序设计语言类似,主要包含以下几种。

(1)   IF…ELSE语句



IF <条件表达式>

    <命令行或程序块>

[ELSE [条件表达式]

    <命令行或程序块>]



其中<条件表达式>可以是各种表达式的组合,但表达式的值必须是“真”或“假”。ELSE子句是可选的。IF…ELSE语句用来判断当某一条件成立时执行某段程序,条件不成立时执行另一段程序。如果不使用程序块,IF或ELSE只能执行一条命令。IF…ELSE可以嵌套使用,最多可嵌套32级。

(2)   BEGIN…END语句



BEGIN

    <命令行或程序块>

END



BEGIN…END用来设置一个程序块,该程序块可以被视为一个单元执行。BEGIN…END经常在条件语句中使用,如IF…ELSE语句。如果当IF或ELSE子句为真时,想让程序执行其后的多条语句,这时就要把这多条语句用BEGIN…END括起来使之成为一个语句块。在BEGIN…END语句中可以嵌套另外的BEGIN…END语句来定义另一程序块。

(3)   CASE语句



CASE<运算式>

    WHEN<运算式>THEN<运算式>

    …

WHEN<运算式>THEN<运算式>

[ELSE<运算式>]

END



例如,在pubs数据库中查询每个作者所居住州的全名,可以使用如下代码实现:



SELECT au_fname, au_lname,

  CASE state

     WHEN 'CA' THEN 'California'

     WHEN 'KS' THEN 'Kansas'

     WHEN 'TN' THEN 'Tennessee'

     WHEN 'OR' THEN 'Oregon'

     WHEN 'MI' THEN 'Michigan'

     WHEN 'IN' THEN 'Indiana'

     WHEN 'MD' THEN 'Maryland'

     WHEN 'UT' THEN 'Utah'

       END AS StateName

FROM pubs.dbo.authors

ORDER BY au_lname



执行结果:



au_fname            au_lname                                   StateName  

-------------------- ---------------------------------------- ----------

Abraham             Bennet                                     California

Reginald            Blotchet-Halls                           Oregon

Cheryl              Carson                                     California

Michel              DeFrance                                   Indiana

Innes               del Castillo                             Michigan

Ann                  Dull                                        California





(4)   WHILE…CONTINUE…BREAK语句



WHILE<条件表达式>

BEGIN

    <命令行或程序块>

    [BREAK]

    [CONTINUE]

    [命令行或程序块]

END



WHILE语句在设置的条件为真时会重复执行命令行或程序块。CONTINUE语句可以让程序跳过CONTINUE语句之后的语句,回到WHILE循环的第一行。BREAK语句则让程序完全跳出循环,结束WHILE循环的执行。WHILE语句也可以嵌套使用。

注意:如果嵌套了两个或多个WHILE循环,内层的BREAK语句将导致退出到下一个外层循环。首先运行内层循环结束之后的所有语句,然后下一个外层循环重新开始执行。

3. 注释
在Transact-SQL语言中可使用两种注释符:行注释和块注释。

行注释符为“--”,这是ANSI标准的注释符,用于单行注释。

块注释符为“/*…*/”,“/*”用于注释文字的开头,“*/”用于注释文字的末尾。块注释符可在程序中标识多行文字为注释。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值