【问题标题】:Table Variables in SSISSSIS 中的表变量
【发布时间】:2010-05-04 18:24:55
【问题描述】:

我可以在一个 SQL 任务中创建一个表变量

DELCARE @TableVar TABLE (...)

然后在另一个 SQL 任务或数据源目标中选择或插入表变量?

我考虑过的另一个选项是使用临时表。

CREATE TABLE #TempTable (...)

我更喜欢使用表变量,以便它保留在内存中。但是如果不能使用表变量,可以使用临时表。我也不能使用记录集目标,因为我需要稍后对其执行直接 SQL 任务。

这试图解决的用例本质上是执行转换而不是 BizTalk。有一个非常大的平面文件到平面文件的转换,BizTalk 必须对其进行转换,不幸的是,数据量会在 BizTalk 服务器上产生不可接受的负载,因此我们的想法是将其卸载到 SSIS。然而,这不是一个简单的行到行的转换,有不同类型的行相互关联。 SSIS 中的第一个任务是将行加载到适当的(临时)表中,然后在第二个数据任务中使用正确的格式执行选择以进行输出。

【问题讨论】:

  • 似乎无法在 SSIS 中使用表变量,我在问这是否可行,如果可以,如何实现。

标签: sql tsql ssis


【解决方案1】:

您可以使用这篇文章中的一些技巧:http://consultingblogs.emc.com/jamiethomson/archive/2006/11/19/SSIS_3A00_-Using-temporary-tables.aspx
尤其是关于在连接管理器上使用 RetainSameConnection=TRUE 的那些。
我有兴趣查看更多关于您有哪些用例要求您在进一步 SSIS 处理之前将数据写入临时表或表变量的信息。在开始使用 SSIS 处理数据流之前,您不能处理源查询中的所有 SQL 必需步骤吗?

【讨论】:

  • 或之后执行 SQL 任务?如果多个包/实例可以同时运行同一个进程,那么临时表就可以了。但是要关闭原始问题的大门 - 否 - 您不能在 SSIS 中使用表变量。
  • 谢谢托德,老实说我没有尝试过,我只是假设如果可以的话,它需要遵循临时表所需的相同解决方法。我试图将@aceinthehole 指向更好地定义问题,以便我们可以帮助解决实际问题,而不是使用临时表解决方法。
【解决方案2】:

表变量不单独保存在内存中,并且可以在内存压力下写入磁盘。我倾向于使用表变量进行非常小的查找。如果由于必要和复杂的转换需要将表推送到 SQL Server,请使用在插入之前在 SSIS 包中截断的“永久”临时表。简单,可以完成您需要的工作。

【讨论】:

    【解决方案3】:

    SSIS 包将在作业中运行。我假设它在 SQL 作业中运行。在这种情况下,使用临时表不会有害。 SQL 作业通常在办公时间之后运行,所以没关系。

    【讨论】:

    • 恐怕这个 SSIS 包的实例可以同时运行多个。
    • 每个实例都有自己的#temp 表。
    • 你是对的。我发现为我的目的保留相同的连接会导致严重的性能问题。我必须使用全局临时表##。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多