在SSIS包中使用临时表

时间:2011-08-16 18:27:25

标签: mysql sql-server ssis temp-tables

我正在从一个数据库到另一个数据库编写基本文件转储。我正在使用SSIS 2008并创建几个包来将我拥有的数据从MSSQL 2010数据库转换为MYSQL 5.1数据库。

所有连接都已设置,并且可以在两个数据库之间传输记录,但我想在转换过程中使用临时表,并使用临时表作为数据流任务中的MSSQL源来转储表等待MYSQL表。

我一直在设置这个问题。我正在使用OLEDB连接并将RetainSameConnection属性以及DelayValidation属性设置为true。当将源图设置为MSSQL数据库中的源时,我找不到我在控制流的早期任务中创建的临时表。我正在为这两项任务使用相同的连接管理器。

任何人对此都有任何想法或经验吗?

作为一个简单的例子,一项任务就是......

SELECT * 
INTO #TMP
FROM CUSTOMERS

(这是一个简化的例子,在这种情况下,我可以使用Customers表,所以请耐心等待我) 是否可以在数据流操作中将此临时表用作源表?

2 个答案:

答案 0 :(得分:1)

正如我在评论中提到的,没有太多的解决方案和更多的解决方法。 SSIS使用结果集的形状来绑定任务中的属性。由于临时表在数据库中并不总是可用,因此即使您将DelayValidation设置为true,也可能导致SSIS出错。

我的解决方案是在您连接的任何数据库中创建SSIS架构。这样做的原因是安全性和明确分离仅在SSIS包中使用的对象 - 主要是登台表。

您可以在dbo架构中创建表格,而不是在SSIS架构中抛出表格(您不应该对此感到羞耻)。典型的数据流会在表开始时截断表,加载值并执行所需的任何操作,可选择在完成时截断它。只要表始终可用,SSIS就可以检查结果集的形状。

答案 1 :(得分:0)

您不应该使用临时表作为源,因为它无法识别选择的列。改为使用表变量或CTE。