以下是我的逻辑应该做的事情
IF @id = 1
BEGIN
SELECT * INTO #abc from table1
END
IF @id = 2
BEGIN
SELECT * INTO #abc frm table2
END
然而,当我执行我的陈述时,我收到错误
已有一个名为#abc ..
的对象
有任何建议可以克服这个错误吗?
答案 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 *
的结果。单独列出列可以更精确地控制结果。