在MSSQL中使用drop table进行双循环

时间:2017-03-13 14:37:22

标签: sql sql-server loops drop-table

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

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

1 个答案:

答案 0 :(得分:1)

正如Sean Lange指出的那样,你可以做任何你没有循环的事情。

在创建具有相同名称的临时表的相同过程中,不能有两个语句。 这是SQL 6.5的剩余部分,它没有延迟的名称解析。

不使用select into,而是使用create table + insert

使用truncate table

,而不是使用相同的架构删除和重新创建相同的表

Answer by Erland Sommarskog on 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;