我有一个select语句,在这里我创建了两个临时表,并在从这些临时表中获取数据之前插入到select中,从而在它们之间创建连接。这个最终选择是我想要的元数据。在ssms它运行良好,在ssis我不知道为什么它抛出该错误。查询是这样的:
CREATE TABLE #Per (PerID bigint NOT NULL......)
CREATE TABLE #Pre (PerID bigint NOT NULL, IsWorking.......)
INSERT INTO #Per SELECT .... FROM .....
INSERT INTO #Pre SELECT .... FROM .....
SELECT * FROM #Per per LEFT JOIN #Pre pre ON per.PerID = pre.PerID
我已经测试了所有语句,以确保它们的工作和查询作为一个整体并且它返回数据,但是ssis正在抛出错误:
The metadata could not be determined because statement 'INSERT INTO #Per SELECT ...... uses a temp table.".
Error at project_name [646]: Unable to retrieve column information from the data source. Make sure your target table in the database is available.
答案 0 :(得分:2)
尝试使用表变量,而不是像:
DECLARE @Per TABLE (PerID bigint NOT NULL......)
DECLARE @Pre TABLE (PerID bigint NOT NULL, IsWorking.......)
INSERT INTO @Per SELECT .... FROM .....
INSERT INTO @Pre SELECT .... FROM .....
SELECT * FROM @Per per LEFT JOIN @Pre pre ON per.PerID = pre.PerID
应该可以正常工作
答案 1 :(得分:1)
如果您正在使用SSIS 2012或更高版本,则它使用系统存储过程 sp_describe_first_result_set 来获取表的元数据,并且它不支持临时表。
但您可以使用其他选项,如表变量和CTE。