SQL Server 表变量陷阱

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循环中,重新声明相同名称的表变量,其原来内容并不会清空。

原文地址:https://www.cnblogs.com/AndyGe/p/2018983.html