Sql server while循环中的表变量不每次初始化:SQL Server
我想知道为什么while循环中的表变量的行为与其他变量不同。表变量只创建一次,将在整个循环中使用。但当循环增加时,其他变量会被初始化 查看下面的代码以了解更多信息Sql server while循环中的表变量不每次初始化:SQL Server,sql-server,while-loop,table-variable,Sql Server,While Loop,Table Variable,我想知道为什么while循环中的表变量的行为与其他变量不同。表变量只创建一次,将在整个循环中使用。但当循环增加时,其他变量会被初始化 查看下面的代码以了解更多信息 declare @tt int set @tt =10 while @tt>0 begin declare @temptable table(id int identity(1,1),sid bigint) insert into @temptable sele
declare @tt int
set @tt =10
while @tt>0
begin
declare @temptable table(id int identity(1,1),sid bigint)
insert into @temptable
select @tt union all
select @tt + 1
select * from @temptable
--delete from @temptable
set @tt=@tt-1
end
这是一个错误吗???你的前提是错误的。其他变量也不会在每次遇到declare语句时重新初始化
set nocount on
declare @tt int
set @tt =10
while @tt>0
begin
declare @i int
set @i = isnull(@i,0) + 1
print @i
set @tt=@tt-1
end
印刷品
1
2
...
9
10
果然
SQL Server变量范围是每个批处理或整个函数/过程/触发器,而不是每个黑色/嵌套构造
:
变量的范围是范围
可以
引用变量。范围
变量从它所在的点开始持续
在批处理结束前声明,或
存储在其中的存储过程
声明
虽然这是一篇老文章,但我不想添加我的评论 set nocount on declare @tt int set @tt =10 while @tt>0 begin declare @i int=0 set @i = @i + 1 print @i set @tt=@tt-1 end Results: 1 1 1 1 1 1 1 1 1 1 不计较 声明@tt int 设置为tt=10 而@tt>0 开始 声明@i int=0 设置@i=@i+1 打印@i 设置@tt=@tt-1 结束 结果: 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.
如果要在每次执行循环时加载表变量。循环中的工作完成后,从@Tablevariable中删除。感谢您的更新。。在使用变量进行测试时,我遗漏了isnull。。这导致了我的共同结论….:(这能证明什么?你在声明末尾重新初始化了@i。)