代码之家  ›  专栏  ›  技术社区  ›  RameshVel

循环中的表变量,而不是每次初始化:SQL Server

  •  5
  • RameshVel  · 技术社区  · 14 年前

    我想知道为什么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 回复  |  直到 14 年前
        1
  •  5
  •   Martin Smith    14 年前

    你的前提是错误的。其他变量也不会在每次遇到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
    
        2
  •  4
  •   gbn    14 年前

    如期而至

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

    变量的范围是范围 可以 引用变量。a的范围 变量从它所在的点开始持续 直到批次结束或 它所在的存储过程 宣布。

        3
  •  -1
  •   Ramakrishna Talla    9 年前

    虽然这是一个老帖子只是想添加我的意见

    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
    
        4
  •  -1
  •   user7954693    7 年前

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

    推荐文章