用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 | 变量保持原值 |
下面代码体现了set语句和select语句在使用上不同.
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'