Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server SQL Server 2012 SSIS-创建临时表问题_Sql Server_Ssis - Fatal编程技术网

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

Sql server SQL Server 2012 SSIS-创建临时表问题,sql-server,ssis,Sql Server,Ssis,我的SQL Server 2012包中有以下任务: 执行SQL任务以创建本地临时表我需要使用本地临时表,因为我将触发相同的并发包 数据流任务:从SQL Server表导出到步骤1中创建的本地临时表中。我将数据源的RatainSameConnection选项=TRUE,将这两个任务的DelayValidation选项设置为TRUE。 运行包后,出现以下错误: The metadata could not be determined because statement select * from

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

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

The metadata could not be determined because statement 
select * from #tmptable uses a temp table.
我对此做了很多研究,但没有找到一个好的解决方案。任何帮助和SSIS工作包示例都将不胜感激。

转到属性并将ValidateExternalMetadata设置为False,这样它就不会尝试检查元数据

如果这不能解决问题

使用全局临时tablesomeTable而不是本地temp tablesomeTable。因此,您可以使用SSMS创建全局临时表,当您在SSIS中使用它时,它不会抱怨元数据

更新:

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


从BIDS中的SSIS菜单中,选择脱机工作模式,然后将全局临时表更改为本地临时表。请确保从属性窗口执行此操作,或者最好使用变量来保存sqlCommand文本,否则SSI将再次抱怨外部元数据。

我刚刚遇到同样的问题,并发现解决方案是在实际选择相同格式的静态数据的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的答案-

通常我会用CTE或表格变量替换temp表格。

数据连接上也有延迟验证吗?它必须是temp吗?它能是永久的吗?您是否希望多个会话同时使用它,即您的包在多个作业中并行运行我不能使用永久表,因为同时运行的包会弄乱数据。请尝试使用一个永久表,该表会在每次执行时创建和删除,并在表名中包含时间戳的某些方面。与其使用dbo.tentable,不如使用dbo.tentable 201412100120000或类似的名称,这样您就可以在执行包时创建一个完全唯一的名称。您仍然需要延迟元数据验证,但不会出现连接问题。此外,如果包失败,您将有一个表进行调查和分类。正如我在原始帖子中提到的,由于SSIS包运行的并发性,我不能使用全局临时表。