我在内部循环时,循环和两个循环对一个表进行了一些修改。我收到表已经存在的错误。下面是此问题的简单示例。有人可以澄清为什么这不起作用吗?我知道如何在这种特殊情况下绕过这个问题,但是我想了解它来自哪里。
CREATE TABLE #a(
ID int)
DECLARE @i INT
DECLARE @j INT
SET @i = 1
SET @j = 1
WHILE @i < 10
BEGIN
SELECT *
INTO #b
FROM #a
DROP TABLE #b
WHILE @j < 10 BEGIN
SELECT *
INTO #b
FROM #a
DROP TABLE #b
SET @j = @j + 1
END
SET @i = @i + 1
END
正如肖恩·兰格(Sean Lange)指出的那样,您可能无需循环就可以做任何事情。
您在相同过程中不能有两个语句,它们创建具有相同名称的临时表。这是SQL 6.5的剩菜,没有延迟名称分辨率。
而不是使用select into
,而是使用create table + insert
。
而不是使用相同的模式掉落和重新创建同一表,而是使用truncate table
。
Erland Sommarskog关于MSDN Social
的答案create table #a(ID int);
create table #b(ID int);
declare @i int;
declare @j int;
set @i = 1;
set @j = 1;
while @i < 10
begin;
insert into #b (id)
select id
from #a;
truncate table #b;
while @j < 10
begin;
insert into #b (id)
select id
from #a
truncate table #b;
set @j = @j + 1;
end;
set @i = @i + 1;
end;