欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  数据库

sql server中局部变量与全局变量的 申明与赋值

程序员文章站 2022-05-05 10:05:01
...
局部变量用一个@标识,全局变量用两个@(常用的全局变量一般都是已经定义好的);

申明局部变量语法:declare @变量名 数据类型;例如:declare @num int;

赋值:有两种方法式(@num为变量名,value为值)

set @num=value; 或 select @num=value;

如果想获取查询语句中的一个字段值可以用select给变量赋值,如下:

select @num=字段名 from 表名 where ……

中变量不用事前申明,在用的时候直接用“@变量名”使用就可以了。

第一种用法:set @num=1; 或set @num:=1; //这里要使用变量来保存数据,直接使用@num变量

第二种用法:select @num:=1; 或 select @num:=字段名 from 表名 where ……

注意上面两种赋值符号,使用set时可以用“=”或“:=”,但是使用select时必须用“:=赋值”


在sql中,我们常常使用临时表来存储临时结果,对于结果是一个集合的情况,这种方法非常实用,但当结果仅仅是一个数据或者是几个数据时,还要去建一个表,显得就比较麻烦,另外,当一个sql语句中的某些元素经常变化时,比如选择条件,(至少我想)应该使用局部变量。当然ms sql server的全局变量也很有用。

> > > > 局部变量

声明:declare @local_variable data_type

@local_variable 是变量的名称。变量名必须以 at 符 (@) 开头。data_type 是任何由系统提供的或用户定义的数据类型。变量不能是 text、ntext 或 image 数据类型。

示例:

use master
declare @sel_type char(2)
declare @sel_cunt numeric(10)
set @sel_type = 'u '/*user table*/
set @sel_cunt = 10

/*返回系统中用户表的数目*/
select @sel_cunt = count(*)
from sysobjects
where type = @sel_type

select @sel_cunt as 'user table ' 's count '

如果要返回系统表的数目,可以用set @sel_type = 's '

可能这个例子并不能说明使用变量的好处,我只是想说明使用方法。当一组(几个甚至几十个)sql语句都使用某个变量时,就能体会到他的好处了。

> > > > 全局变量

全局变量是系统预定义的,返回一些系统信息,全局变量以两个at(@)开头。下面是我统计了一些较为常用的变量。

@@connections
返回自上次启动以来连接或试图连接的次数。

@@cursor_rows
返回连接上最后打开的游标中当前存在的合格行的数量。

@@datefirst
返回每周第一天的数字

@@error
返回最后执行的sql 语句的错误代码。

@@fetch_status
返回被 fetch 语句执行的最后游标的状态,而不是任何当前被连接打开的游标的状态。

@@identity
返回最后插入的标识值

@@langid
返回当前所使用语言的本地语言标识符(id)。

@@language
返回当前使用的语言名。

@@lock_timeout
返回当前会话的当前锁超时设置,单位为毫秒。

@@procid
返回当前过程的标识符 (id) 。

@@rowcount
返回受上一语句影响的行数。

@@servername
返回运行 的本地服务器名称。

@@spid
返回当前用户进程的服务器进程标识符 (id)。

@@trancount
返回当前连接的活动事务数。

@@version
返回当前安装的日期、版本和处理器类型。