在sis软件包中使用临时表

use*_*747 1 ssis stored-procedures visual-studio-2010 sql-server-2012

我有一个问题-我想在存储过程中使用临时表是SQL Server,它将从SSIS包中执行。我读了一些技巧,然后尝试了一个(第一个答案):在SSIS中使用Temp表, 但是没有用。我有MS Visual Studio 2010,这个版本可以吗?这是我在存储过程中的代码:

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
Run Code Online (Sandbox Code Playgroud)

感谢您的任何建议或经验。

这是来自Visual Studio的错误消息:

数据流任务[OLE DB源[1]]时出错:SSIS错误代码DTS_E_OLEDBERROR。发生OLE DB错误。错误代码:0x80004005。OLE DB记录可用。来源:“ Microsoft SQL Server Native Client 11.0”结果:0x80004005说明:“由于过程'some_procedure'中的语句'INSERT INTO #some_table VALUES(250)'使用临时表,因此无法确定元数据。”

数据流任务[OLE DB源[1]]发生错误:无法从数据源中检索列信息。确保数据库中的目标表可用。

Wil*_*ght 5

在SQL Server 2012中,如果使用临时表,则必须指定结果集。

这是sp_describe_first_result_set过程的问题,SSIS用于返回输出元数据。

例如

EXEC dbo.RptResults_StoredProcedure
Run Code Online (Sandbox Code Playgroud)

成为

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)
))
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请查看

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