每次循环时没有初始化的表变量:SQL Server

时间:2010-09-20 11:41:40

标签: 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 
                select @tt union all
                select @tt + 1 

                select * from @temptable 
               --delete from @temptable
                set @tt=@tt-1
end

这是一个错误吗?

4 个答案:

答案 0 :(得分: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

答案 1 :(得分:4)

正如预期的那样

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

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

  

变量的范围是范围   可以的Transact-SQL语句   引用变量。范围   变量从它的位置持续   声明直到批次结束或   它所在的存储过程   声明。

答案 2 :(得分:0)

虽然它很老,但只想添加我的评论

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

答案 3 :(得分:-1)

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