2014-12-03 110 views
0

我在SQL Server執行下列任務2012包:SQL Server 2012的SSIS - 創建臨時表的問題

  1. 執行SQL任務,以創建本地臨時表(我需要使用本地臨時表,因爲我會發射相同的併發包)
  2. 數據流任務:從SQL Server表導出到步驟1中創建的本地臨時表中。對於數據源和兩種任務的DelayValidation,我都有RatainSameConnection選項= TRUE。

當我運行該程序包,我得到這個錯誤:

The metadata could not be determined because statement 
select * from #tmptable uses a temp table. 

我這個研究了很多,但無法找到一個很好的解決方案。任何幫助和示例工作SSIS包將不勝感激。

+0

您是否對數據連接有延遲驗證? – 2014-12-03 01:52:04

+0

它是否必須是臨時的?它可以永久嗎?您是否期望多個會話同時使用它(即,您的程序包在多個作業中並行運行) – 2014-12-03 03:27:47

+0

我無法使用永久表,因爲同時運行的程序包會混淆數據。 – Abiete 2014-12-09 23:17:41

回答

0

轉到屬性並將ValidateExternalMetadata設置爲False,因此它不會嘗試檢查元數據。

如果不解決問題,那麼,

使用global temporary table(##someTable),而不是local temp table(#someTable)。所以你可以使用SSMS創建全局臨時表,然後當你在SSIS中使用它時,它不會抱怨元數據。

更新:

如果你想使用本地臨時表,然後做到這一點,你已經按照上面的步驟,

SSIS menu在BIDS後,選擇Work Offline模式,然後改變你的Global temp table to Local temp Table。請務必從Property window或更好地使用variable來保存sqlCommand文本,否則SSIS將再次抱怨外部元數據。

+0

我改變了ValidateExternalMetadatabut它沒有幫助。 正如我在原始文章中提到的,由於SSIS包運行的併發性,我無法使用全局臨時表。 – Abiete 2014-12-10 00:58:03

1

我只是有這個同樣的問題,找到解決的辦法是之前創建查詢假的數據集,你實際選擇聲明選擇的靜態數據是相同的格式。

SET FMTONLY ON 
select 0 as a, 1 as b, 'test' as C, GETDATE() as D 
SET FMTONLY OFF 

--now put the real query 
select a, b, c, d from ##TempTable 

凱爾硬朗的答案 - SSIS Package not wanting to fetch metadata of temporary table

0

一般來說,我的CTE或表變量代替臨時表。