0

以下是我的逻辑应该做的

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

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

但是,当我执行我的语句时,我收到错误消息

已经有一个名为#abc..的对象

请问有什么建议可以克服这个错误吗?

4

2 回答 2

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 表中的不同列才能对其执行任何有意义的操作,对吧?

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

于 2012-06-20T14:19:47.690 回答
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 *。单独列出列可让您更精确地控制结果。

于 2012-06-20T14:18:57.610 回答