您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

第三章 T-SQL 编程

2024/4/15 3:42:06发布44次查看
3.1 使用变量 变量是可以存储数据值的对象。可以使用局部变量向sql语句传递数据。在t-sql中执行一批sql语句时,可以声明许多变量以便临时使用。声明变量以后,可以在批处理中用一条t-sql语句设置该变量的值。该批处理中的下一条语句可以从该变量中检索数值,
3.1 使用变量
变量是可以存储数据值的对象。可以使用局部变量向sql语句传递数据。在t-sql中执行一批sql语句时,可以声明许多变量以便临时使用。声明变量以后,可以在批处理中用一条t-sql语句设置该变量的值。该批处理中的下一条语句可以从该变量中检索数值,并给出结果。
t-sql中的变量分为局部变量和全局变量。局部变量的使用也是先声明,再赋值。而全局变量右系统定义和维护,我们可以直接使用,但一般不自定义全局变量。
3.1.1 局部变量
局部变量的名称必须以标记@作为前缀。
声明局部变量的语句如下:
declare @variable_name datatype
其中, variable_name 为局部变量的名称,datatype为数据类型。
例如:
declare @name varchar(8)     --- 声明一个存放学员姓名的变量name,最多可以存储8个字符
declare @seat int     --- 声明一个存放学员座位号的变量seat
局部变量的赋值有两种方法:使用set 语句或 select 语句。
语法:
set @variable_name = value

select @variable_name = value
假定使用insert语句,已向表stuinfo中插入了如下几条测试数据。
stunamestunostusexstuagestuseatstuaddress
张秋丽s25301男181北京海淀
李文才s25302男313地址不详
李斯问s25303女222河南洛阳
欧阳俊雄s25304男284新疆
示例1
/*-- 查找'李文才'的信息 --*/
declare @name varchar(8)---学员姓名
set @name = '李文才' ---使用set赋值
select * from stuinfo where stuname = @name
/*-- 查找'李文才'的左右同桌 --*/
declare @seat int --- 座位号
select @seat = stuseat from stuinfo where stuname = @name --- 使用select赋值
select * from stuinfo where (stuseat = @seat + 1) or (stuseat = @seat - 1)
从示例1可以看出,局部变量可用于在上下语句中传递数据(如本例的座位号@seat)。
set 赋值语句一般用于赋给变量指定的数据常量,如本例“李文才”。
select 赋值语句一般用于从表中查询数据,然后再赋给变量。需要注意的是,select 语句需要确保筛选的记录不多于一条。如果查询的记录多于一条,将把最后一条记录的值赋给变量。
3.1.2 全局变量
sql server 中的所有全局变量都使用两个@标志作为前缀。
常用的全局变量见下图。
变量含义
@@error最后一个t-sql错误的错误号
@@identity最后一次插入的标识值
@@language当前使用的语言的名称
@@max_connections可以创建的同时连接的最大数目
@@rowcount受上一个sql语句影响的行数
@@servername本地服务器的名称
@@servicename该计算机上的sql服务的名称
@@timeticks当前计算机上每刻度的微妙数
@@transcount当前连接打开的事务数
@@versionsql server的版本信息
3.2 输出语句
t-sql中支持的输出语句,用于输出显示处理的数据结果。
常用的输出语句用两种,它们的语法分别如下。
pint 局部变量或字符串
select 局部变量 as 自定义列名
其中,第二种方法就是查询语句的特殊应用。
示例2
pint '服务器的名称:' + @@servername
select @@servername as '服务器名称'
用print 语句输出的结果将在消息窗口中以文本方式显示,用select 语句输出的结果将在结果窗口中以表格方式显示。
由于使用print语句要求以单个局部变量或字符串表达式作为参数,所以如果我们这样编写sql语句将会出错。
print '当前错误号' + @@error
因为全局变量@@error返回的是整型数值。那么如何解决呢?(转换函数,把数值转换成字符串)
print '当前错误号' + convert(varchar(5) , @@error)
理解了输出语句后,我们再看看有关全局变量的示例。
示例3
insert into stuinfo( stuname, stuno, stusex, stuage) values ('梅超风', 's25318', '女', '23')
print '当前错误号' + convert(varchar(5), @error) ---如果大于0,表示上一条语句执行有错误
print '刚才报名的学员,座位号为:' + convert(varchar(5), @@identity)
update stuinfo set stuage = 85 where stuname = '李文才'
print '当前错误号:' + convert(varchar(5), @@error)
print 'sql server 的版本' + @@version
go
@@error 用于表示最近一条sql语句是否有错误,香港虚拟主机,如果有错误,将返回非零的值。第一次“insert”语句没错,所以为0。第二次“update”语句违反年龄15~40的检查约束,所以错误号不为零。
@@identity可用来查询最后插入的标识值(自动编号值)。例如,本例stuinfo表的stuseat(座位号)字段,我们前面已定义为标识列(自动标号列),香港空间,该列的值将自动生成,所以在插入时不用跳鞋座位号的数据。一旦插入数据后,我们可以通过查询@@identity全局变量,来查看目前的自动编号值,即“梅超风”的座位号。
3.3 逻辑控制语句
3.3.1 if-else 条件语句
语法
if (条件)
语句或语句块
else
语句或语句块
同java语言一样,else为可选。
如果有多条语句,需要使用语句块,语句块使用begin···end表示,其作用类似java语言的“{}”符合。
if(条件)
begin
语句1
语句2
···
end
else
···
假定我们已向学员成绩表stumarks中添加以下测试数据。
examnostunowrittenexamlabexam
s271811s253038058
s271813s253025090
s271815s25302650
s271816s253017782
示例4
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 desc
end
else
begin
print '本班笔试成绩较差,后三名的成绩为:'
select top 3 * from stumarks order by writtenexam
end
为了把输出的表格数据和文本消息显示在同一个窗口中,需要做如下设置。
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product