SQL编程_局部变量_全局变量_cast,convert数据类型转换_if,else_while_case,end
使用变量
变量分为:
局部变量:
1.局部变量必须以标记@作为前缀,如@age
2.局部变量的使用也是先声明,再赋值
全局变量:
1.全局变量必须以标记@@作为前缀,如@@version
2.全局变量由系统定义和维护,我们只能读取,不能修改全局变量的值
声明局部变量
语法
DECLARE @变量名 数据类型
示例
DECLARE @name varchar(8) DECLARE @seat int
赋值-语法
SET @变量名 = 值 或 SELECT @变量名 = 值
赋值-示例
SET @name = '张三' SELECT @name = studentName FROM Student WHERE studentNo = '10011'
SET赋值与SELECT赋值的区别
SET |
SELECT |
|
同时对多个变量赋值 |
不支持 |
支持 |
表达式返回多个值时 |
出错 |
将返回的最后一个值赋给变量 |
表达式未返回值时 |
变量被赋NULL值 |
变量保持原值 |
全局变量
全局变量都使用两个@标志作为前缀
变 量 |
含 义 |
@@ERROR |
最后一个T-SQL错误的错误号 |
@@IDENTITY |
最后一次插入的标识值 |
@@LANGUAGE |
当前使用的语言的名称 |
@@MAX_CONNECTIONS |
可以创建的同时连接的最大数目 |
@@ROWCOUNT |
受上一个SQL语句影响的行数 |
@@SERVERNAME |
本地服务器的名称 |
@@TRANSCOUNT |
当前连接打开的事务数 |
@@VERSION |
SQL Server的版本信息 |
如何获得数据库服务器的名称和SQLSERVER的版本信息?
分析:
1.由@@SERVERNAME得到数据库服务器名称,@@VERSION获得SQLSERVER的版本
2.利用PRINT语句输出消息或SELECT语句输出结果
PRINT '服务器的名称: ' + @@SERVERNAME PRINT 'SQL Server的版本' + @@VERSION
使用全局变量输出数据库信息
SELECT @@SERVERNAME AS '服务器的名称: ' SELECT @@VERSION AS 'SQL Server的版本'
如何获得数据更新失败时的错误信息?
分析:
使用@@ERROR全局变量表示错误号
1.@@ERROR大于0
2.最近一条SQL语句执行失败的错误号
示例:
1.插入名为“武松”、出生日期是1990年12月31日的学生信息
2.修改“武松”的出生日期为“1970年7月8日”
INSERT INTO Student (StudentName,StudentNo,LoginPwd, GradeId,Sex,BornDate,IdentityCard) VALUES('武松',10011,'123456',1,0,'1990-12-31','11010119901231001x') PRINT '当前错误号' + CONVET(varchar(5), @@ERROR) UPDATE Student SET BornDate='1970-7-8' WHERE StudentNo=10011 PRINT '当前错误号:' + CONVERT(varchar(5), @@ERROR) GO
数据类型转换函数
T-SQL提供了两个转换函数
语法一
CAST(表达式 AS 数据类型)
示例一
SELECT StudentName + '的出生日期是' + CAST(BornDate as varchar(50)) AS '学生信息' FROM Student
语法二
CONVERT(数据类型,表达式,样式 )
示例二
SELECT StudentName, CONVERT(varchar(50),BornDate,102) AS 出生日期 FROM Student
CONVERT()与CAST() 的不同点是:可以指定转换的样式
逻辑控制语句
分支结构
1.IF-ELSE语句
2.CASE-END语句
循环结构
1.WHILE语句
IF-ELSE语句
SQL中的IF-ELSE语句 IF (条件) BEGIN 语句1 语句2 … … END ELSE BEGIN 语句1 语句2 … … END
ELSE是可选部分 如果有多条语句,才需要 BEGIN-END语句块
设置输出结果的格式
WHILE循环语句
SQL中的WHILE语句 WHILE (条件) BEGIN 语句1 语句2 …… BREAK END
BREAK表示跳出循环 如果有多条语句,才需要BEGIN-END语句块
CASE-END语句
语法:
CASE WHEN 条件1 THEN 结果1 WHEN 条件2 THEN 结果2 …… ELSE 其他结果 END
ELSE:表示CASE中所有WHEN条件均不为 TRUE 时返回的结果 如果省略ELSE且WHEN条件都为FALSE时,CASE语句返回NULL
示例:
采用美国ABCDE五级打分制显示学生Java Logic课最近一次考试成绩
A级: 90分以上
B级: 80-89分
C级: 70-79分
D级: 60-69分
E级: 60分以下
DECLARE @date datetime --考试时间 …… SELECT 学号=StudentNo, 成绩= CASE WHEN StudentResult < 60 THEN 'E' WHEN StudentResult BETWEEN 60 AND 69 THEN 'D' WHEN StudentResult BETWEEN 70 AND 79 THEN 'C' WHEN StudentResult BETWEEN 80 AND 89 THEN 'B' ELSE 'A' END FROM Result ……
批处理命令
1.批处理是包含一个或多个 SQL 语句的组,从应用程序一次性地发送到SQL Server执行
2.SQL Server 将每批SQL语句编译成一个执行单元,此单元称为执行计划
问题:
为了督促学生学习,学校对多次考试不及格的学生给予处理。凡是一次考试不及格者,给予警告;三次以下(含)不及格者,肄业处理;三次以上不及格者,开除学籍
分析:
第一步:创建新表Punish,表结构是:
1.处罚记录(学号、不及格次数、处理意见)
2.创建新表时处理意见为空
第二步:查询所有不及格的成绩插入Punish表中
第三步:根据每个学生不及格次数批量更新处理意见
CREATE TABLE Punish( --创建表 StuNo int NOT NULL, --学号 StuCnt int NOT NULL, --不及格次数 StuMng varchar(50) --处理意见 ) GO INSERT INTO Punish --插入数据 SELECT StudentNo 学号, COUNT(0) 不及格次数,'' 处理意见 FROM Result WHERE StudentResult<60 GROUP BY StudentNo GO …… SELECT * FROM Punish --查询
使用批处理可以提高代码的执行效果,通常会将相关业务的代码放在同一批处理语句中
总结
1.变量赋值时可以采用SET语句和SELECT语句
2.输出语句可以使用PRINT语句和SELECT语句
3.使用CAST()函数和CONVERT()函数实现数据类型的转换