2016-03-22 82 views
2

我有一個select語句,其中我創建了2個臨時表,並在從這些臨時表中獲取數據之前執行了插入操作,從而在它們之間創建連接。最後的選擇是我想要的元數據。在ssms中它運行良好,在ssis中我不知道爲什麼它會拋出該錯誤。查詢是這樣的:元數據無法確定,因爲語句'insert into

CREATE TABLE #Per (PerID bigint NOT NULL......) 
CREATE TABLE #Pre (PerID bigint NOT NULL, IsWorking.......) 
INSERT INTO #Per SELECT .... FROM ..... 
INSERT INTO #Pre SELECT .... FROM ..... 
SELECT * FROM #Per per LEFT JOIN #Pre pre ON per.PerID = pre.PerID 

我已經測試過的所有語句,以確保他們的工作和查詢作爲一個整體,它返回我的數據,但SSIS是引發錯誤:

The metadata could not be determined because statement 'INSERT INTO #Per SELECT ...... uses a temp table.". 
Error at project_name [646]: Unable to retrieve column information from the data source. Make sure your target table in the database is available. 

回答

2

嘗試使用表變量,而不是像這樣:

DECLARE @Per TABLE (PerID bigint NOT NULL......) 
DECLARE @Pre TABLE (PerID bigint NOT NULL, IsWorking.......) 
INSERT INTO @Per SELECT .... FROM ..... 
INSERT INTO @Pre SELECT .... FROM ..... 
SELECT * FROM @Per per LEFT JOIN @Pre pre ON per.PerID = pre.PerID 

應該正常工作

1

如果您正在在SSIS 2012或更高版本上,它使用系統存儲過程sp_describe_first_result_set來獲取表的元數據,並且它不支持臨時表。
但您可以使用其他選項,如表格變量和CTE。