【发布时间】:2015-09-02 16:01:28
【问题描述】:
我对将数据从 XML 数据源加载到 SQL Server 中还很陌生,但过去我已经成功地使用了格式正确的 XML 数据源。我有一个 Web 服务,它通过 SSIS 从第三方解决方案中调用以获取数据。该网络服务将数据吐出如下:
<?xml version="1.0" encoding="utf-16"?>
<EpsTableEx xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<ErrorString />
<ErrorNum>1</ErrorNum>
<Data>
<ArrayOfString>
<string>ObjectId</string>
<string>Form_Type</string>
<string>Owner</string>
<string>CompletedDate</string>
<string>Delivered</string>
<string>Name</string>
<string>EventID</string>
</ArrayOfString>
<ArrayOfString>
<string>183122</string>
<string>Form1</string>
<string>91b</string>
<string>2015-03-02</string>
<string>2015-04-22</string>
<string>Onboarding</string>
<string>21966</string>
</ArrayOfString>
<ArrayOfString>
<string>183152</string>
<string>Form1</string>
<string>2879d</string>
<string>2015-03-02</string>
<string>2015-04-22</string>
<string>Onboarding</string>
<string>21967</string>
</ArrayOfString>
</Data>
</EpsTableEx>
第一个 ArrayOfString 是列标题,而不是每个元素都是列标题。
在另一个具有正确格式的 XML Web 服务的包中,我正在使用 XML 任务编辑器通过 XPATH 操作进入数据级别,这对我来说在这里不起作用。这会导致 ArrayOfString 和 String 被剥离,所有数据都连接在一起。
我试过了:
- 将 XPATH 操作更改为 XML 路径的不同级别,但未成功。
- 更改 XSD 文件以尝试强制它认为 ArrayOfString 标记中的文本将是要插入到表中的文本,然后稍后对其进行解析,但没有数据通过。
- 将 XSD 文件更改为定义字段的 String1、String2 等,希望它将映射到每个项目的通用字符串标签。
我正在使用 SQL Server 2014 和 Data Tools 来构建 SSIS 包。
编辑: 目标是在 SSIS 中提供一个可以每晚运行的解决方案。
编辑2: 数据将被加载到如下表中:
CREATE TABLE [dbo].[FormXML](
[ObjectID] [nvarchar](255) NULL,
[Form_Type] [nvarchar](255) NULL,
[Owner] [nvarchar](255) NULL,
[CompletedDate] [nvarchar](255) NULL,
[Delivered] [nvarchar](255) NULL,
[Name] [nvarchar](255) NULL,
[EventID] [nvarchar](255) NULL,
[ADD_DTTM] [datetime] NULL DEFAULT (getdate()))
我不关心 ErrorString 或 ErrorNum 节点。我调整了建议的 XML 查询以使用执行 SQL 任务将数据插入到表中。
在 SSIS 中放入变量的 XML 是 +400k 个字符。根据这篇文章(http://www.sqlservercentral.com/articles/SQL+Server/97947/),我在网上看到一个字符串变量有 2GB 的限制。我怀疑这是我的问题,如果我可以将 Web 服务中的 XML 加载到 XML 变量而不是字符串变量中,我就不会遇到这个问题。
【问题讨论】:
-
您可能必须编写自定义 C# 脚本组件源才能正确解析 XML :-(