以下兩個臨時表,但不同的結構是我的邏輯是應該做的如何使用相同名稱
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