SSIS中的表变量

时间:2010-05-04 18:24:55

标签: sql tsql ssis

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

DELCARE @TableVar TABLE (...)

然后在另一个SQL Task或DataSource目的地中选择或插入表变量?

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

CREATE TABLE #TempTable (...)

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

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

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

SSIS包将在一份工作中运行。我假设它在SQL作业中运行。在这种情况下,使用临时表不会造成伤害。 SQL作业通常在办公时间之后运行,因此无关紧要。