2017-09-05 116 views
1

SSIS新手在這裏。ssis temp table exec proc

我有我創建基於嚮導的SSIS包。我添加了一個SQL任務來運行我之前單獨運行的腳本,以便將過程簡化爲一步。該腳本使用大量臨時表,並在結尾處使用一個全局## temp以使結果在進程外可訪問。

當我嘗試執行這個包,我得到一個複雜的「包驗證錯誤」(錯誤代碼0x80040E14)。我認爲錯誤信息的執行部分是「無效的對象名稱## roster5'」。

我才意識到這是被扔錯誤的數據流任務,所以我試圖把另一個SQL任務一切之前創建表,以便數據流任務將看到表中是存在的;但它仍然給我錯誤:「無效的對象名稱」## ROSTER_MEMBER_NEW5「。」

我缺少/做錯了嗎?我不知道我不知道什麼。看起來這不應該是複雜的(作爲一個新手,我知道這是可能的...一些重複,但我不知道該怎麼問這樣的問題)。基於

+0

有幾個解決方案。首先告訴我你期望在## roster5,## roser)member_news5中有多少行。 – plditallo

+0

oops,## roster5只是全名的縮寫;有大約500萬行由腳本生成 – hmmmmm

+0

您會看到一些建議將您的#temp錶轉換爲表變量(例如@temptable)。優化器會將變量表視爲具有單行的表,這將影響性能。您還將看到其他建議,例如設置frmt off(https://stackoverflow.com/questions/1579476/using-temp-tables-in-ssis)。這也會導致性能下降。我將創建一個具有可識別架構的臨時表,填充它,然後通過截斷時。 – plditallo

回答

0

您響應,另一種選擇是在執行獨立T-SQL的SQL代理作業中添加T-SQL步驟。您需要重新考慮原始SSIS包的流量控制,並將其分成2個獨立的包。第一個SSIS包將執行T-SQL步驟之前所需的全部內容,下一步將執行聚合所需的實際T-SQL,然後最後一步將調用第二個包,以完成該過程。

我提供需要提醒的這個建議,這是不可取的。最適合的方法是與DBA溝通,DBA將能夠爲您提供一個服務帳戶,以執行您的SSIS軟件包,並提供截斷臨時表所需的提升權限,這些臨時表需要您的進程管理。

0

我實際上想發佈一個非答案。我試圖按照上面的建議以及我可以,但沒有任何工作。我的腳本應該運行,然後數據泵應該從本質上將全局temp的內容複製到另一個服務器/表。我是這樣做的兩個步驟,並試圖使用SSIS一步完成。實際上並不需要在組件之間傳遞SSIS中的值。似乎這不應該那麼難。

無論如何,正如我所說的沒有任何工作。好吧,讓我告訴我發生了什麼。在犯了很多錯誤,大量撤消和大量失敗嘗試之後,一些東西開始工作。我認爲其中一件事情是我將ResultSetType設置爲ResultSetType_None,因爲我不會使用該步驟的任何結果。如果有人認爲這不是發生的事情,我很高興聽到現實,因爲我想學習。

我認爲這是一個非答案,因爲我有一點信心,我是對的,或者說,我比事故以外的任何得到它。