SQL Server 表变量陷阱
时间:2011-04-17 来源:Andy Ge
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
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循环中,重新声明相同名称的表变量,其原来内容并不会清空。
相关阅读 更多 +