我的SQL Server 2012包中有以下任务:
运行包后,我收到此错误:
The metadata could not be determined because statement
select * from #tmptable uses a temp table.
我研究了很多,但无法找到一个好的解决方案。任何帮助和样本工作SSIS包将不胜感激。
答案 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或表变量替换临时表。