在MSSQL中使用Drop Table的双循环



我在内部循环时,循环和两个循环对一个表进行了一些修改。我收到表已经存在的错误。下面是此问题的简单示例。有人可以澄清为什么这不起作用吗?我知道如何在这种特殊情况下绕过这个问题,但是我想了解它来自哪里。

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;

最新更新