【问题标题】:Creating XML Schema for Bulk Load to SQL Server - Child Element Describes Parent创建用于批量加载到 SQL Server 的 XML 架构 - 子元素描述父元素
【发布时间】:2016-12-18 09:16:02
【问题描述】:

我有一个 XML 文档,我正在为其构建架构,以便将这些文档批量加载到 SQL Server 表中。我关注的 XML 如下所示:

<Coverage>
    <CoverageCd>BI</CoverageCd>
    <CoverageDesc>BI</CoverageDesc>
    <Limit>
        <FormatCurrencyAmt>
            <Amt>30000.00</Amt>
        </FormatCurrencyAmt>
        <LimitAppliesToCd>PerPerson</LimitAppliesToCd>
    </Limit>
    <Limit>
        <FormatCurrencyAmt>
            <Amt>85000.00</Amt>
        </FormatCurrencyAmt>
        <LimitAppliesToCd>PerAcc</LimitAppliesToCd>
    </Limit>
</Coverage>
<Coverage>
    <CoverageCd>PD</CoverageCd>
    <CoverageDesc>PD</CoverageDesc>
    <Limit>
        <FormatCurrencyAmt>
            <Amt>50000.00</Amt>
        </FormatCurrencyAmt>
        <LimitAppliesToCd>Coverage</LimitAppliesToCd>
    </Limit>
</Coverage>

在 Limit 元素内,我需要使用一个子 LimitAppliesToCd 来确定 Amt 元素的值实际存储在我的表中的位置。使用 SQL Server 的标准 XML 批量加载功能可以做到这一点吗?通常在 XML 中,我希望元素有一个包含“PerPerson”或“PerAcc”信息的属性,但我们使用的这个标准不需要这样做。

如果有人以前使用过 ACORD 标准,那么您可能知道我在这里使用的是什么。非常感谢任何帮助。

【问题讨论】:

  • 这个问题解决了吗?您需要进一步的帮助吗?请给我一个提示:如果您在最佳答案的投票柜台下方勾选接受检查,那就太好了。这将 1) 将此问题标记为已解决 2) 让追随者更容易找到最佳解决方案 3) 向回答者支付积分和 4) 向您支付积分。一旦您自己越过 15 点边界,您 - 另外 - 被要求对贡献进行投票。这是说谢谢的方式。快乐编码!

标签: sql-server xml bulk-load


【解决方案1】:

不知道你在说什么,但这是从 XML 中获取信息的解决方案。

假设:您的 XML 已经批量加载到 XML 类型的声明变量 @xml 中:

CTE 将从您的 XML 中提取信息。然后,最终查询将使用PIVOT 将您的数据放入右列。

使用合适的表格结构,实际插入应该很简单......

WITH DerivedTable AS
(
    SELECT cov.value('CoverageCd[1]','varchar(max)') AS CoverageCd
          ,cov.value('CoverageDesc[1]','varchar(max)') AS CoverageDesc
          ,lim.value('(FormatCurrencyAmt/Amt)[1]','decimal(14,4)') AS Amt
          ,lim.value('LimitAppliesToCd[1]','varchar(max)') AS LimitAppliesToCd
    FROM @xml.nodes('/root/Coverage') AS A(cov)
    CROSS APPLY cov.nodes('Limit') AS B(lim)
)
SELECT p.*
FROM
(SELECT * FROM DerivedTable) AS tbl
PIVOT
(
    MIN(Amt) FOR LimitAppliesToCD IN(PerPerson,PerAcc,Coverage)
) AS p

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-22
    • 1970-01-01
    • 2018-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多