请看下面的代码:
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也能显示出数字
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也能显示出数字
2:
GO
用信号通知 Microsoft® SQL Server™ 实用工具一批 Transact-SQL 语句的结束。
此時語句已經結束
@i的作用域已經結束
所以第二個提示沒有聲明
from master..spt_values
where type='p' and number<3
/*
-----------
1
2
3(3 行受影响)
*/
DECLARE @i AS INT
SET @i=isnull(@i,0)+1
PRINT @i
END
GO 3
/*
开始执行循环
1
1
1
批处理执行已完成 3 次。
*/加个块就能看的更清楚了。
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 行)