第三章 T-SQL编程
3.1 使用变量
T-SQL中的变量分为:
一、局部变量:先声明再赋值
二、全局变量:由系统进行定义,不能自定义
3.1.1 局部变量
一、声明:
(一)格式:DECLARE @变量名 变量数据类型
(二)示例:
declare @number int -- 一个名为number的int型变量
declare @string varchar(8) -- 一个名为string的varchar类型变量
二、赋值:
(一)使用SET进行赋值:只能赋值一个变量
格式:SET @变量名 = 变量值
(二)使用SELECT进行赋值:可以同时赋值多个变量
格式:SELECT @变量名1 = 变量值1, @变量名2 = 变量值2, ...
(三)示例:
set @number = 10
select @numer = 10, @string = 'abc'
三、在查询中使用变量:
在数据表stuInfo中,查询一个名为“李文才”的学员信息及其同桌的信息,其中字段stuName,stuSeat代表“学员姓名”和“学员座位编号”,注意局部变量的作用域为一个批处理语句块,即下例中的整个GO部份
/*查找李文才的信息*/
declare @name varchar(8)
set @name = '李文才'
select * from stuInfo where stuName = @name
/*查找李文才的左右同桌*/ declare @seat int
select @seat = stuSeat from stuInfo where stuName = @name
select * from stuInfo where stuSeat = @seat + 1 or stuSeat = @seat - 1
go
3.1.2 全局变量
一、在SQL SERVER 中的全局变量都使用两个“@”标志作为前缀
二、常用的全局变量:全局变量可在“联机丛书”中通过关键字“全局”进行查询
@@error:最后一个T-SQL错误的错误号
@@identity:最后一次插入的标识值
@@language:当前使用的语言的名称
@@max_connections:可以创建的同时连接的最大数目
@@rowcount:受上一个SQL语句影响的行数
@@servername:本地服务器的名称
@@servicename:该计算机上的SQL服务的名称
@@timeticks:当前计算机上每刻度的微秒数
@@transcount:当前连接打的事务数
@@version:SQL SERVER的版本信息
3.2 输出语句
一、格式:
(一)print 局部变量(字符型类型)或字符串
(二)select 局部变量 as 自定义列名
二、示例:
print '服务器的名称:' + @@servername
select @@servername as '服务器的名称:'
print '错误编号为:' + convert(varchar(4),@@error) --因为@@error返回的是一个数字,所以要用convert()函数进行转换
3.3 逻辑控制语句
3.3.1 IF-ELSE条件语句
一、格式:当IF或ELSE部份只包括一条语句时,可将BEGIN和END省略
IF (条件)
BEGIN
语句或语句块
END
ELSE
BEGIN
语句或语句块
END
二、示例:
在stuMarks学员成绩表中,统计并显示本班笔试平均分,如果在70以上,显示“成绩优秀”,并显示前3名学员的考试成绩。如果在70以下,显示“本班成绩较差”,并显示后3名学员的考试信息,其中WrittenExam字段为笔试成绩
declare @myavg float
select @myavg = avg(WrittenExam) from stuMarks
print '本班的平均分为:' + convert(varchar(5),@myavg)
if (@myavg >= 70)
begin
print '本班成绩优秀'
select top 3 * from stuMarks order by WrittenExam
end
else
begin
print '本班成绩较差'
select top 3 * from stuMarks order by WrittenExam desc
end
go
3.3.2 WHILE循环语句
一、格式:BREAK用于跳出循环体
WHILE(条件)
BEGIN
语句或语句块
[BREAK]
END
二、示例:
本次考试成绩较差,假定要提分,确保每人笔试都通过。提分规则很简单,先每人都加2分,看是否都通过,如果没有全部通过,每人再加2分,再看是否都通过,如此反复提分,直到所有人都通过为止
declare @n int
while (1=1)
begin
select @n = count(*) from stuMarks where WrittenExam < 60
if (@n > 0)
update stuMarks set WrittenExam = WrittenExam + 2
else break
end
go
3.3.3 CASE多分支语句
一、格式:
CASE
WHEN 条件1 THEN 结果1
WHEN 条件2 THEN 结果2
... ...
[ELSE] 其它结果
END
二、示例:
采用美国的ABCDE五级打分制显示笔试成绩 print 'ABCDE五级显示成绩如下:'
select stuNo, 成绩 = case
when writtenExam >= 90 then 'A'
when writtenExam between 80 and 89 then 'B'
when writtenExam between 70 and 79 then 'C'
when writtenExam between 60 and 69 then 'D'
else 'E'
end
from stuMarks
go
3.4 批处理语句
批处理语句是指以一条命令的方式来处理一组命令的过程,它以"GO"作为标志,一次性处理一条或多条SQL语句,其好处就是以能够简化数据库的管理,在T-SQL中,建库,建表以及建存储过程或视图等命令要以"GO"结束
相关文章
- sql server数据库行转列及巧用case when、和row_number用法例子
- 在SQL SERVER 的数据库设计期,可以修改表中某个字段的名称或删除这个字段,如何在程序中做到这一点呢,用什么语句?
- SQL Server 数据库备份和还原——使用sqlcmd
- SQL Server2000,现在数据库的可用空间为0,请问如何实现自动增长?
- sql优化:从设计表结构开始(SQL Server中如何让数据库中某一个字段随时间自动更新?)
- 查看SQL Server数据库中各个表和视图的索引所占的空间大小
- SQL Server2012 创建数据库存储过程和VS2015 C#调用自己的存储过程
- SQL server 数据库调用远程数据库存储过程的实现方法
- 浅谈SQL Server中的事务日志(五)----日志在高可用和灾难恢复中的作用
- C#实现ODBC驱动代码连接Sql Server数据库