0

我有一個問題 - 我想在存儲過程中使用臨時表是SQL Server,它將從SSIS包執行。 我看了一些提示如何做到這一點,我試過這個(第一個答案):​​ 但它沒有奏效。 我有MS Visual Studio 2010,不能是這個版本的問題? 這是我在存儲過程的代碼:在ssis包中使用臨時表

CREATE PROCEDURE some_procedure  
AS 
SET NOCOUNT ON 
IF 1 = 0 
BEGIN 
    SELECT CAST(NULL AS int) as number 
END 
CREATE TABLE #some_table (number int) 
INSERT INTO #some_table VALUES (250) 
SELECT number FROM #some_table 

感謝您的任何意見或經驗。

這裏是從Visual Studio錯誤消息:

錯誤在數據流任務[OLE DB源[1]]:SSIS錯誤代碼 DTS_E_OLEDBERROR。發生了OLE DB錯誤。錯誤代碼: 0x80004005。 OLE DB記錄可用。源:「Microsoft SQL 服務器本機客戶端11.0」Hresult:0x80004005描述:「 元數據無法確定,因爲過程'some_procedure'中的語句'INSERT INTO #some_table VALUES(250)'使用臨時表」。

數據流任務錯誤[OLE DB Source [1]]:無法從數據源檢索列 信息。確保您的目標表在 數據庫可用。

+0

您遇到的問題,獲取元數據?如果是這樣,您需要在設計中設置「SET FMTONLY ON」以獲取元數據,然後在設計之後移除以獲取數據。 [這是使用FMTONLY獲取元數據的信息](http://munishbansal.wordpress.com/2009/02/18/set-fmtonly-on-useful-in-tsql-ssis-packages-for-using-temp -tables /) – Tak 2014-08-28 13:10:41

回答

1

而不是臨時表,你可以使用表變量或cte ...這些沒有像臨時表的問題。

CREATE PROCEDURE some_procedure  
AS 
SET NOCOUNT ON 

Declare @some_table TABLE (number int) 
INSERT INTO @some_table VALUES (250) 
SELECT number FROM @some_table 
4

在SQL Server 2012中,如果使用臨時表,則必須指定一個結果集。

這是SSIS用來返回輸出元數據的sp_describe_first_result_set過程的問題。

E.g.

EXEC dbo.RptResults_StoredProcedure 

變爲

EXEC dbo.RptResults_StoredProcedure 
WITH RESULT SETS 
((
    Date NVARCHAR(10), 
    Location VARCHAR(12), 
    Department CHAR(1), 
    Shift CHAR(1), 
    ForecastSales DECIMAL(18,2), 
    ActualSales DECIMAL(18,2) 
)) 

欲瞭解更多信息視圖

http://blog.concentra.co.uk/2014/08/22/column-metadata-determined-correctly-ssis-data-flow-task-stored-procedure-inputs/