Sql server while循环中的表变量不每次初始化:SQL Server

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

我想知道为什么while循环中的表变量的行为与其他变量不同。表变量只创建一次,将在整个循环中使用。但当循环增加时,其他变量会被初始化

查看下面的代码以了解更多信息

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。)