我有一个问题 - 我想在存储过程中使用临时表是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]]:无法检索列 来自数据源的信息。确保您的目标表在 数据库可用。
答案 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)
))
有关详细信息,请参阅
答案 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