变量的使用
局部变量
-
必须以标记@作为前缀,如@age
-
局部变量的使用先声明(使用关键字declare),再赋值
DECLARE @age INT --声明局部变量@age --SET @age=20 --赋值局部变量 SELECT @age=20 SELECT @age --查看局部变量的值
使用SELECT赋值确保筛选出的记录只有一条
全局变量
- 必须以标记@@作为前缀,如@@version
- 由系统定义和维护,只能读取,不能修改全局变量值
变量的使用
问题:编写T-SQL查询小明及其学号相邻的学员
DECLARE @StuId INT --声明学号变量,这个变量记录小明的学号
SELECT @StuId=ID FROM Student WHERE Name='小明'--根据学生姓名查询出改学生的学号
SELECT * FROM Student WHERE ID=(@StuId+1) OR ID=(@StuId-1)--根据这个学号查询相邻的学员信息
SET与SELECT区别
使用场景 | SET | SELECT |
---|---|---|
同时对多个变量赋值 | 不支持 | 支持 |
表达式返回多个值时 | 出错 | 将返回的最后一个值赋给变量 |
表达式未返回值时 | 变量被赋予NULL值 | 变量保持原值 |
DECLARE @age INT,@name VARCHAR(20)
--SET @age=20,@name='张三'--不允许这样做
SELECT @age=20,@name='张三'
SELECT @name
--SET @name=(SELECT Name FROM Student)
SELECT @name=Name FROM Student
--SET @name=(SELECT NAME FROM Student WHERE ID=0)
SELECT @name=NAME FROM Student WHERE ID=0
SELECT @name
全局变量的使用
变量 | 含义 |
---|---|
@@ERROR | 最后一个T-SQL错误的错误号 |
@@IDENTITY | 最后一次插入的标识值 |
@@LANGUAGE | 当前使用的语言的名称 |
@@MAX_CONNECTIONS | 可以创建的同时连接的最大数目 |
@@ROWCOUNT | 受上一个SQL语句影响的行数 |
@@SERVERNAME | 本地服务器的名称 |
@@TRANSCOUNT | 当前连接打开的事务数 |
@@VERSION | SQL Server的版本信息 |
数据类型转换
数据类型转换
-
使用Convert函数实现强制转换
CONVERT(数据类型,表达式,样式)--第三个参数可以省略。它一般用于日期类型数据转换为字符类型,
PRINT '平均年龄是:'+CONVERT(VARCHAR(20),@avgAge)
-
使用CAST函数进行转换
CASR(表达式 AS 数据类型)
PRINT '平均年龄是:'+CAST(@avgAge AS VARCHAR(20))