SQL Server 2012 SSIS - 创建临时表问题

时间:2014-12-03 01:49:13

标签: sql-server ssis

我的SQL Server 2012包中有以下任务:

  1. 执行SQL任务以创建本地临时表(我需要使用本地临时表,因为我将触发相同的并发包)
  2. 数据流任务:从SQL Server表导出到步骤1中创建的本地临时表。对于数据源,我将RatainSameConnection选项= TRUE,将两个任务的DelayValidation设置为true。
  3. 运行包后,我收到此错误:

    The metadata could not be determined because statement 
    select * from #tmptable uses a temp table.
    

    我研究了很多,但无法找到一个好的解决方案。任何帮助和样本工作SSIS包将不胜感激。

3 个答案:

答案 0 :(得分:1)

我刚遇到同样的问题,发现解决方法是在实际 SELECT 语句之前在查询中创建一个假数据集 SELECT 的静态数据格式相同。

SET FMTONLY ON
select 0 as a, 1 as b, 'test' as C, GETDATE() as D
SET FMTONLY OFF

--now put the real query
select a, b, c, d from ##TempTable

参见 Kyle Hale 的回答 - SSIS Package not wanting to fetch metadata of temporary table

答案 1 :(得分:0)

转到媒体资源并将ValidateExternalMetadata设置为False,这样就不会尝试检查元数据。

如果那不能解决问题,那么

使用global temporary table(##someTable)代替local temp table(#someTable)。所以你可以使用SSMS创建那个全局临时表,然后当你在SSIS中使用它时,它不会抱怨元数据。

更新

如果您想使用本地临时表,请在执行上述步骤后执行此操作

从BIDS中的SSIS menu,选择Work Offline模式,然后更改您的Global temp table to Local temp Table。确保从Property window或更好地使用variable来保存sqlCommand文本,否则SSIS会再次抱怨外部元数据。

答案 2 :(得分:0)

通常我用CTE或表变量替换临时表。