代码改变世界

SQL Server 表变量陷阱

2011-04-17 17:09  Andy Ge  阅读(272)  评论(0编辑  收藏  举报
declare @i int = 0

while (@i < 5)
begin
    
declare @dt table(id int)
    
    
insert into @dt
    
select @i
    
    
select * from @dt
    
    
set @i += 1
end    

 

上述语句并不是每次输出一条,而是累积上面的所有的记录

如下:

 

(1 行受影响)
id
-----------
0

(1 行受影响)

(1 行受影响)

id
-----------
0
1

(2 行受影响)

(1 行受影响)

id
-----------
0
1
2

(3 行受影响)

(1 行受影响)

id
-----------
0
1
2
3

(4 行受影响)

(1 行受影响)

id
-----------
0
1
2
3
4

(5 行受影响)

 

也就是说在sQL循环中,重新声明相同名称的表变量,其原来内容并不会清空。