我有以下存储过程来测试变量范围
alter proc updatePrereq
@pcntr int,
@pmax int
as
begin
if @pcntr = 1
begin
declare @i int
set @i= @pcntr
end
set @i=@pcntr
select @i;
end
go
在上面的脚本中@i仅在@pcntr值为1时在if块中声明。假设从该脚本中调用上述存储过程5次
declare @z int
set @z = 1
declare @max int
set @max = 5
while @z <= @max
begin
exec dbo.updatePrereq @z, @max
set @z = @z + 1
end
go
正如我之前所说,@i
变量仅在@pcntr
为1
时才存在。因此,当我第二次调用存储过程时,控件无法进入if块,因此@i变量甚至不存在。但是脚本会在每次迭代中打印@i
中的值,如果@i
值大于{{1}时出现@pcntr
变量不存在,则会出现错误}?
答案 0 :(得分:4)
变量的范围是可以引用变量的Transact-SQL语句的范围。变量的范围从声明它的位置延迟到声明它的批处理或存储过程的结尾。 (来源: MSDN )
其范围不会以If satement