2014-08-28 105 views
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/