T-SQL 变量作用域

T-SQL 变量作用域

在T-sql中声明变量时,需要注意变量的作用域:

1. 变量在一个批处理过程中声明后,在这个批处理里都是有用的;局部变量的作用域从声明变量的地方开始到声明变量的批处理或存储过程的结尾。

2. 存储过程内表示一个域.走出存储过程变量作用域失效

3. 在批标识符Go结束后,变量作用域失效

例1:

declare @var int = 2;
select @var; -- 正确:(1 行受影响)
go

select @var; --出错: 提示必须声明标量变量
go

例2: 在一个批处理过程中(或存储过程中), 在一个循环中声明变量,变量的作用域并不局限在循环中, 这与C语言、java等编程语言不同:

select * from city -- 城市表

select * from region -- 行政区表

--声明游标
declare city_cursor cursor for select city_name, city_code from city; 

declare @city_name varchar(50);--城市名称
declare @city_code varchar(50);--城市编码

--打开游标
open city_cursor;

fetch next from city_cursor into @city_name, @city_code;

while(@@FETCH_STATUS = 0)
begin
	declare @first_region_name varchar(50); --当前城市下的第一个行政区名称
	
	select @first_region_name = region_name
	from region 
	where city_code = @city_code;
	
	print '当前城市名称:'+ @city_name + '  第一个行政区名称: ' + @first_region_name;
	
	fetch next from city_cursor into @city_name, @city_code;
end
close city_cursor;
deallocate city_cursor;

print '循环结束:循环中声明的变量@first_region_name的值为:'  + @first_region_name; 
运行结果:

当前城市名称:杭州  第一个行政区名称: 余杭区
当前城市名称:南京  第一个行政区名称: 白下区
当前城市名称:上海  第一个行政区名称: 白下区
循环结束:循环中声明的变量@first_region_name的值为:白下区

第一次循环:查询 到“杭州” 下的第一个行政区的名称 “余杭区”,

第二次循环:查询 到“南京” 下的第一个行政区的名称 “白下区”,

第三次循环:查询 “上海” 下的第一个行政区的名称,因为region(行政区表)没有上海市的行政区, 

但是@first_region_name的值还是上次循环的值。@first_region_name的作用域不会随begin...end结束而消失. 即使循环结束, 依然可以访问@first_region_name。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值