以下两个临时表,但不同的结构是我的逻辑是应该做的如何使用相同名称
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的对象..
有什么建议可以解决这个错误吗?
另一种可能的解决方案:
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 *
的结果。单独列出列可让您更精确地控制结果。
你不能。解析器不理解您的逻辑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表,以做任何有意义与它不同的栏目,对不对?
(或避免临时表干脆。)
这只能工作,直到选择INTO#abc1或abc2的东西..正如我在我的问题中提到,我必须把结果(意思#abc1或#abc2)INTO# GrandTotal ..你的逻辑会给我两个#GrandTotal,这将再次抛出我相同的错误 – rock
@ranjith我不明白这个问题。如果#GrandTotal总是SUM(numeric_column),varchar_column'的结果,为什么它必须改变?你唯一需要改变的是你是否从#abc1或#abc2中插入总数。如果列是不同的,并且你的查询必须反映出来,我完全不知道你从命名原来的表得到了什么。如果你展示你的*整个*脚本,而不仅仅是导致错误的部分,你可能会得到更多有用的信息,以便如何以正确的方式做到这一点,而不是你已经决定完成的方式。 –
由于大小限制,我无法在这里添加整个脚本..是否有任何其他方式..即时通讯对不起,我新到了stackoverflow .. – rock
我已经清理了问题,所以只用你的错误消息的原因涉及。我相信您的流程的其他部分应该得到一些真正的关注,但您可以分别处理这些问题。 –
谢谢,亚伦! – rock