请看下面的代码:
DECLARE @i AS INT
SET @i=isnull(@i,0)+1
PRINT @i
GO 3
PRINT @i
问题1: 为什么我的第一个print显示的是
1
1
1
而不是
1
2
3
我如何让它显示1,2,3?
问题2:
我知道declare声明的是局部变量,如何声明为不是局部的呢?好让第二个print也能显示出数字

解决方案 »

  1.   

    1: 可以用循環 或者借住系統表
    2:
    GO 
    用信号通知   Microsoft®   SQL   Server™   实用工具一批   Transact-SQL   语句的结束。 
    此時語句已經結束
    @i的作用域已經結束
    所以第二個提示沒有聲明
      

  2.   

    select number+1
    from master..spt_values
    where type='p' and number<3
    /*
    -----------
    1
    2
    3(3 行受影响)
    */
      

  3.   

    BEGIN
    DECLARE @i AS INT
    SET @i=isnull(@i,0)+1
    PRINT @i
    END
    GO 3
    /*
    开始执行循环
    1
    1
    1
    批处理执行已完成 3 次。
    */加个块就能看的更清楚了。
      

  4.   

    DECLARE @i AS INT
    set @i=0
    while @i<3
    begin
    SET @i=isnull(@i,0)+1
    select @i
    end/*            
    ----------- 
    1(所影响的行数为 1 行)            
    ----------- 
    2(所影响的行数为 1 行)
    DECLARE @i AS INT
    set @i=0
    while @i<3
    begin
    SET @i=isnull(@i,0)+1
    select @i
    end/*            
    ----------- 
    1(所影响的行数为 1 行)            
    ----------- 
    2(所影响的行数为 1 行)            
    ----------- 
    3(所影响的行数为 1 行)
                
    ----------- 
    3(所影响的行数为 1 行)