【问题标题】:Looping through XML node using ForEach loop container via SSIS通过 SSIS 使用 ForEach 循环容器循环通过 XML 节点
【发布时间】:2013-10-01 00:09:55
【问题描述】:

下面是我的 XML 文件

<?xml version="1.0" encoding="ISO-8859-1"?>
 <DataResult>
  <Data>
   <Name lang="eng">Reshma</Name>
   <Birth Date>1988-09-23T00:00:00</Birth Date>
  </Data>
 <Data>
   <Name lang="eng">Rahul</Name>
   <Birth Date>1991-09-23T00:00:00</Birth Date>
 </Data>
</DataResult>

我正在尝试将此 XML 节点值读入 for each 循环容器,下面是我的 for each 循环容器设置,

现在我想从上面的 XML 文件中读取 Name 节点值并将该值输入数据库,我不能先使用单个变量读取第一个 Name将节点值写入其中并更新数据库并再次用另一个 Name 节点重写相同的变量并更新数据库,因为我的主 xml 文件将有 n 个 Name节点。

我的主要目的是将xml文件节点读入foreach循环,尝试了很多但无法得到解决方案,任何帮助将不胜感激。

【问题讨论】:

  • 我不确定您是否真的需要 foreach 容器。为什么不直接通过“XML Source”读取整个文件,然后使用“OLE DB 命令”(每行数据执行一次)并使用具有适当 WHERE 条件的 UPDATE 语句? (如果您对如何执行此操作有任何疑问,请告诉我)
  • @TsSkTo.. 当我使用 XML 源时,我无法在 OLEDB 目标中获取 Name 值,它显示一些警告,例如没有为 xml source.output[Name] 指定最大长度.columns[lang] 具有外部数据类型 system.string。将使用长度为255的ssis数据流任务数据类型“DT_WSTR”以及为什么要使用sql命令,我不能通过OLEDB目标直接将数据插入数据库..

标签: xml xpath ssis foreach-loop-container


【解决方案1】:

这是一个可能的解决方案,它可能会回避实际问题。

就像我在 cmets 中提到的那样,我认为您实际上并不需要“foreach 容器”。使用“XML Source”直接导入您的所有数据。接下来,根据您的“DT_WSTR”错误,我建议您使用“数据转换”或“派生列”组件为您的列添加最大长度。

最后,如果要将数据插入到表中,则可以使用“OLE DB 目标”。我的印象是您想要更新一些现有数据,在这种情况下,我一直使用带有 UPDATE 语句的“OLE DB 命令”。

【讨论】:

  • @TsSkTo... 非常感谢,它很有效,解决方案如此简单,非常努力地执行 sql 任务,对于每个循环,但与此同时,我学到了很多。谢谢再一次。
猜你喜欢
  • 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
相关资源
最近更新 更多