【问题标题】:Use temp tables in SSIS packages在 SSIS 包中使用临时表
【发布时间】:2011-10-28 07:52:46
【问题描述】:

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

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

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

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

作为一个简单的例子,一个任务可以完成..

SELECT * 
INTO #TMP
FROM CUSTOMERS

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

【问题讨论】:

  • SSIS 在使用临时表方面变得特别笨拙,因为它试图将模式绑定到您设置的任务和数据流中。如果有解决方案,我还没有找到。我们使用 SSIS 模式来保存临时表等来解决这个问题。
  • 您能否添加一个解决方案来解决这项工作的细节问题?

标签: mysql sql-server ssis temp-tables


【解决方案1】:

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

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

与其在dbo 架构中扔表(反正你不应该这样,真丢脸),不如在SSIS 架构中创建它们。典型的数据流会在开始时截断表,加载值并执行所需的任何操作,完成时可选择截断它。只要表始终可用,SSIS 就可以检查结果集的形状。

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 如果声明了表变量或 CTE,它是否会显示为可供选择的表?
    • @JBone,加入它的选择不会被 SSIS 识别为源数据。
    猜你喜欢
    • 2023-03-11
    • 2023-04-01
    • 2021-11-28
    • 1970-01-01
    • 1970-01-01
    • 2018-02-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多