在ssis包中使用临时表

时间:2014-08-28 11:37:32

标签: visual-studio-2010 stored-procedures ssis sql-server-2012

我有一个问题 - 我想在存储过程中使用临时表是SQL Server,它将从SSIS包执行。 我读了一些如何做的提示,我尝试了这个(第一个答案):Using Temp tables in SSIS 但它不起作用。 我有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

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

以下是来自Visual Studio的错误消息:

  

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

     

数据流任务错误[OLE DB源[1]]:无法检索列   来自数据源的信息。确保您的目标表在   数据库可用。

2 个答案:

答案 0 :(得分: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/

答案 1 :(得分:2)

而不是临时表,你可以使用表变量或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