IF OBJECT_ID('tempdb..#tempTable2') IS NOT NULL
DROP TABLE #tempTable2;
IF @someCondition is not null
BEGIN
SELECT * INTO #tempTable2 FROM Table; --No problem, no error
END
ELSE
BEGIN
SELECT * INTO #tempTable2 FROM Table; --Execution failed
END
Msg 2714,Level 16,State 1,Line 197已经有一个名为的对象 '#tempTable2'在数据库中。
我可以知道上述情况可能是什么原因?在程序上,第一个IF部分中的查询没有被执行,因此它不应该创建#tempTable2
答案 0 :(得分:1)
在创建具有相同名称的临时表的相同过程中,不能有两个语句。 这是SQL 6.5的剩余部分,它没有延迟的名称解析。
不使用select into
,而是使用create table + insert
。
Answer by Erland Sommarskog on MSDN Social
if object_id('tempdb..#tempTable2') is not null
drop table #tempTable2;
create table #tempTable2 (...);
if @someCondition is not null
begin
insert into #tempTable2
select * from Table;
end
else
begin
insert into #tempTable2
select * from Table;
end
答案 1 :(得分:0)
我希望你能理解我的英语倾诉。 问题不是"如果"但是"选择" 使用结构"从table1&#34中选择* into table2;将自动为ssms创建一个新表。 这意味着,当您在另一个时间使用相同的语句时,table2已在您的数据库中创建。 您不需要再次创建它,或者您可以使用其他名称创建它。