以下是我的逻辑应该做的
IF @id = 1
BEGIN
SELECT * INTO #abc from table1
END
IF @id = 2
BEGIN
SELECT * INTO #abc frm table2
END
但是,当我执行我的语句时,我收到错误消息
已经有一个名为#abc..的对象
请问有什么建议可以克服这个错误吗?
以下是我的逻辑应该做的
IF @id = 1
BEGIN
SELECT * INTO #abc from table1
END
IF @id = 2
BEGIN
SELECT * INTO #abc frm table2
END
但是,当我执行我的语句时,我收到错误消息
已经有一个名为#abc..的对象
请问有什么建议可以克服这个错误吗?
你不能。解析器不理解您的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 表中的不同列才能对其执行任何有意义的操作,对吧?
(或者完全避免使用临时表。)
另一种可能的解决方案:
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 *
。单独列出列可让您更精确地控制结果。