gpt4 book ai didi

sql - MSSQL 中带删除表的双循环

转载 作者:行者123 更新时间:2023-12-04 23:43:22 25 4
gpt4 key购买 nike

我在 while 循环中有 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

最佳答案

正如 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;

关于sql - MSSQL 中带删除表的双循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42766307/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com