Sql server Select into Temp表格不能在单独的IF条件下存在?

Sql server Select into Temp表格不能在单独的IF条件下存在?,sql-server,sql-server-2008,Sql Server,Sql Server 2008,Msg 2714,级别16,状态1,第197行已经有一个名为 数据库中的“诱惑2” 我可以知道发生上述情况的原因吗?从程序上讲,如果没有执行第一个IF部分中的查询,那么它不应该创建Attendable2我希望您能理解我的英语。 问题不在于if,而在于select语句 使用结构,从表1选择*进入表2将自动为ssms创建一个新表。 这意味着,当您在其他时间使用同一语句时,表2已经在您的数据库中创建。 您不需要再次创建它,也可以使用其他名称创建它。在同一过程中,不能有两条语句使用相同的名称创建临时表。

Msg 2714,级别16,状态1,第197行已经有一个名为 数据库中的“诱惑2”


我可以知道发生上述情况的原因吗?从程序上讲,如果没有执行第一个IF部分中的查询,那么它不应该创建Attendable2

我希望您能理解我的英语。 问题不在于if,而在于select语句 使用结构,从表1选择*进入表2将自动为ssms创建一个新表。 这意味着,当您在其他时间使用同一语句时,表2已经在您的数据库中创建。
您不需要再次创建它,也可以使用其他名称创建它。

在同一过程中,不能有两条语句使用相同的名称创建临时表。 这是SQL6.5的遗留问题,它没有延迟的名称解析

使用CREATETABLE+insert代替SELECTINTO

可以将放置表添加到else零件。至于为什么会这样,我不确定。可能表的创建是在SQL Server在执行语句之前解析语句时完成的,因此事先不知道条件的结果。我已经测试过将drop table命令放在两个IF部分中,但它也不起作用。
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
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