7

我想知道为什么 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

这是一个错误?

4

4 回答 4

5

你的前提是错误的。每次遇到声明语句时,其他变量也不会重新初始化。

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
于 2010-09-20T11:46:44.380 回答
4

正如预期的那样

SQL Server 变量范围是每个批次或整个函数/过程/触发器,而不是每个黑色/嵌套构造

http://msdn.microsoft.com/en-us/library/ms187953.aspx

变量的范围是可以引用该变量的 Transact-SQL 语句的范围。变量的范围从声明它的那一刻开始一直持续到声明它的批处理或存储过程结束。

于 2010-09-20T11:50:39.600 回答
-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
于 2015-07-10T13:24:25.780 回答
-1

如果要在每次循环执行时加载表变量。一旦在循环内完成工作,就从@Tablevariable 中删除。

于 2017-05-24T23:53:30.137 回答