用SQL编写程序首先我们要了解SQL的一些编程方法
1.使用变量
变量:是可以存储数据值的对象,可以使用局部变量向SQL语句专递数据.
(1)局部变量
T-SQL中,局部变量的名称必须以标记@作为前缀.
声明局部变量的语法如下:
语法
declare @variable_name DateType
其中,variable_name 为局部变量的名称,DateType为数据类型.
例如:
Declare @name varchar(8)
Declare @number int
局部变量的赋值有两种方法:使用SET语句和SELECT语句
语法
set @variable_name = value
或者
select @variable_name = value
/*--查找张三的信息--*/
declare @name varchar(8)
set @name = '张三'
select StudentNo, StudentName, BornDate,Address
from Student
where Studentname = @name /*--查找与张三学号相邻的学生信息--*/
declare @StudentNo int
--使用 select 赋值
selece @StudentNo = StudentNo from Student
where StudentName = @name
select StudentNo, StudentName, BornDate,Address
from Student
where (StudentNo = @StudentNo+1) or (StudentNo = @StudentNo-1)
GO
在T-SQL语言中,为局部变量赋值的语句有SET语句和SELECT语句
下表是set语句和select语句的区别
set | select | |
同时对多个变量赋值 | 不支持 | 支持 |
表达式返回多个时 | 出错 | 将返回的最后一个值赋给变量 |
表达式未返回值时 | 变量被赋值为null | 变量保持原值 |
Declare @Addr nvarchar(100), @name nvarchar(100) Set @addr='', @name='张三'
Select @addr='北京', @name='张三' set@addr = (select address from Student)
Select @addrc = address from Student Set @addr = (Select address from Student where 1<0)
--查询无结果时,@addr被赋值为null
select @addr='北京'
select @address = Address from Student where 1<0
--查询无结果时,@addr保持原值
全局变量
SQL Server 中的所有全局变量都使用两个@符号作为前缀
最重要的五个全局变量
变量 | 含义 |
@@error | 最后一个T-SQL错误的错误号 |
@@identity | 最后一次插入的标识值 |
@@powcount | 受上一个SQL语句影响的行数 |
@@servername | 本地服务器名称 |
@@version | SQL Server 版本信息 |
输出语句
语法
print 局部变量或字符串
select 局部变量as自定义列名
print '服务器名称:' + @@servername
print 'SQL Server的版本' +@@version
select @@servername as '服务器名称'
server @@version as 'SQL Server的版本'
局部变量
01.语法
Declare @age int
--赋值
Set @age=20
逻辑控制语句
(1)begin-end语句
语法
begin
语句或语句块
end
作用类似于C#中的 ‘{}‘
(2)if-else语句
语法
if(条件)
语句或语句块1
else
语句或语句块2
declare @avg int
select @avg= AVG(studentresult) from Result,Subject
where Result.SubjectId=Subject.SubjectId
and ExamDate>='2013-08-09'
and ExamDate<'2013-08-10'
and Subject.SubjectName='oop' --02.判定:>=70 显示优秀,同时显示分数最高的三个人的分数
if(@avg>=70)
begin
print '优秀'
--显示前名成绩 当天 oop
select top 3 * from Result,Subject
where result.SubjectId=Subject.SubjectId
and ExamDate>='2013-08-09'
and ExamDate <'2013-08-10'
and SubjectName='oop'
--降序排列desc
order by StudentResult desc end
else
begin
print '较差'
--显示前名成绩 当天 oop
select top 3 * from Result,Subject
where result.SubjectId=Subject.SubjectId
and ExamDate>='2013-08-09'
and ExamDate <'2013-08-10'
and SubjectName='oop'
--降序排列desc
order by StudentResult asc
end
(3)while循环语句
语法
while(条件)
begin
语句或语句块
[brwak | continue]
end
(4)case多分支语句
case
when 条件1 then 结果 1
when 条件2 then 结果2
[else 其他结果]
end
declare @date datetime
select @date = max(Examdate) from result
inner join Subjiect on result.SubjectNo=Subjiect.SubjiectNo
where SubjectName='java logic' select 学号=StudentNO, 成绩= case
when StudentResult >90 then 'A'
when StudentResult >80 then 'B'
when StudentResult >80 then 'C'
when StudentResult >80 then 'D'
else 'A'
end
from result
inner join Subjiect on result.SubjectNo=Subjiect.SubjiectNo
where SubjectName='java logic'