上一篇讲到MSSQL的数据类型,今天简单说说变量的知识。
变量,是相对于常量而言的一个概念,字面的意思常量就是一个不变的值,如1,2,3,4,5,6...a,bc之类的,变量就是一个可变的值。
变量可分为局部变量和全局变量,局部变量需要预先定义,前面以一个@开头,常于declare联用,全局变量可以看作是系统变量,不用定义可以直接调用,前面以两个@开头。
以下展开来说一下:
(1)局部变量:定义方式 declare @变量名 数据类型
如 declare @i int 就定义了一个整型变量@i 数据类型不理解的去翻下上一篇文章:基本技能篇:SQL 的数据类型
变量赋值:set 或 select
如 set @i =1 这个时候 @i 里的值就是1 了
还有 select @i= count(1) from table A 类似这样的应用。
执行 select @i 则会展示@i 的值。
变量的使用:
a) 作为查询条件使用,当@i被定义并赋值后,可以放到where条件里使用
如 select * from tableB where xh =@i ;
b) 作为判断条件使用,其实用法和常量类似,如:
if @i >1
begin
........
end
c) 作为存储过程的入参使用,这里是固定语法,如:
create proc 存储过程名
@rq1 datetime,
@rq2 datetime
as
.......
上述三点涉及到一些查询、聚合函数、存储过程等,有不明白的可以先放下,后面会慢慢讲到。主要是要理解 局部变量的作用,下面用代码和执行结果对比,更加有助于理解:
代码段1 :
DECLARE @i INT ----定义变量@i
SELECT @i -----先看下@i的值,此时没有赋值的情况下默认是null
SET @i = 1 ----将@i 赋值为1
SELECT @i ----再次查看@i 的值
执行的结果:
代码段2 :
DECLARE @i INT ----定义
SET @i = 1 ----赋值
SET @i=@i+1 ----先自增1 ,再赋值回@i
SELECT @i ---展示结果
效果如下 :
通过这两个例子,应该对变量有个基本的理解了。需要说明一点的是,局部变量只是局部有效,比如在当前存储过程内或在当前进程内,离开当前的执行过程,局部变量就会被释放了。
(2)全局变量:
全局变量实际上是获取数据库层面的一些参数,前面有两个@@,在平时使用过程中其实出现的频率不高,最常用的就两个:@@ERROR和@@ROWCOUNT 。
@@ERROR返回最后执行的sql是否报错,如果报错,这个变量就不为0 ,这边变量经常用来判断上一句是否执行成功。而@@ROWCOUNT则返回上一句执行所影响的行数,常用来判断INSERT 是否成功。
其他的全局变量由于用的很少,本文不作过多阐述,有兴趣的可以自行网上查下,欢迎评论区讨论分享!