如何使用SSIS加载分组数据

Wil*_* Xu 5 sql t-sql sql-server ssis ssis-2012

我有一个棘手的平面文件数据源.数据分组,如下所示:

Country    City
U.S.       New York
           Washington
           Baltimore
Canada     Toronto
           Vancouver
Run Code Online (Sandbox Code Playgroud)

但我希望它在加载到数据库时成为这种格式:

Country    City
U.S.       New York
U.S.       Washington
U.S.       Baltimore
Canada     Toronto
Canada     Vancouver
Run Code Online (Sandbox Code Playgroud)

以前有人遇到过这样的问题吗?有想法处理它?
我现在唯一的想法是使用光标,但它太慢了.
谢谢!

Tab*_*man 3

cha 的答案是可行的,但如果您需要在没有临时/临时表的情况下在 SSIS 中执行此操作,这里还有另一个答案:

您可以通过使用数据流级变量的脚本转换来运行数据流。当每一行进入脚本时,都会检查“国家/地区”列的值。

如果它具有非空值,则用该值填充变量,并将其在数据流中传递。

如果 Country 具有空白值,则用变量的值覆盖它,这将是您获得的最后一个非空白 Country 值。

编辑:我查找了您的错误消息并了解了有关脚本组件(数据流工具,而不是脚本任务、控制流工具)的新知识:

ReadWriteVariables 集合仅在 PostExecute 方法中可用,以最大限度地提高性能并最大限度地降低锁定冲突的风险。因此,您不能在处理每行数据时直接增加包变量的值。相反,增加局部变量的值,并在处理完所有数据后,将包变量的值设置为 PostExecute 方法中局部变量的值。您还可以使用 VariableDispenser 属性来解决此限制,如本主题后面所述。但是,在处理每一行时直接写入包变量会对性能产生负面影响并增加锁定冲突的风险。

这来自这篇 MSDN 文章,如果您想走这条路,该文章还提供了有关变量分配器解决方法的更多信息,但显然我在上面说您可以在脚本中设置包变量的值时误导了您。您必须使用脚本的本地变量,然后在执行后事件处理程序中更改它。我无法从文章中看出这是否意味着您将无法读取脚本中的变量,如果是这种情况,那么变量分配器将是唯一的选择。或者我想您可以创建脚本将具有只读访问权限的另一个变量,并将其值设置为表达式,以便它始终具有读写变量的值。这可能有用。