如何使用两个具有相同名称但结构不同的临时表

时间:2012-06-20 14:14:10

标签: sql-server tsql foxpro

以下是我的逻辑应该做的事情

IF @id = 1
BEGIN
  SELECT * INTO #abc from table1
END

IF @id = 2
BEGIN
  SELECT * INTO #abc frm table2
END

然而,当我执行我的陈述时,我收到错误

  

已有一个名为#abc ..

的对象

有任何建议可以克服这个错误吗?

2 个答案:

答案 0 :(得分:3)

你做不到。解析器无法理解您的IF逻辑,并将SELECT INTO语句视为发生的事情。

你应该做的是:

IF @id = 1
BEGIN
SELECT * INTO #abc1 from table1
END

IF @id = 2
BEGIN
SELECT * INTO #abc2 frm table2
END

IF @id = 1
  SELECT * FROM #abc1;
ELSE
  SELECT * FROM #abc2;

毕竟,你需要知道#temp表中的不同列,以便用它做任何有意义的事,对吧?

(或者完全避免使用临时表。)

答案 1 :(得分:0)

另一种可能的解决方案:

CREATE TABLE #abc (
 --put schema here
)

IF @id = 1
BEGIN
  insert into #abc
  select * from table1
END

IF @id = 2
BEGIN
  insert into #abc
  select * from table2
END

select * from #abc

drop table #abc;

您应该始终使用列名而不是*,因为它在性能方面更好。

此外,select *查找当前表中的所有列,表格结构的更改(如添加,删除或重命名列)会自动修改select *的结果。单独列出列可以更精确地控制结果。