将XML导入SQL Server

古齐

我想知道如何将XML文件插入SQL Server DB。以下是我拥有的XML,但是我不确定如何以可扩展的方式执行此操作。我的想法是插入选择语句,但我不知道这是否会随着数据的增加而起作用。先感谢您!

<Records>
    <Record>
        <ID SpecNum="5069580" IssueNum="001" SpecStatus="Pre-Approved">
            <NutritionDetails>
                <NutrientFacts>
                    <NutrientNameId>ENERC_KCAL</NutrientNameId>
                    <NutrientName>ENERC_KCAL</NutrientName>  
                    <NutrientPer100gUnrounded>1.91</NutrientPer100gUnrounded>
                    <NutrientPer100gRounded>191</NutrientPer100gRounded>
                </NutrientFacts>
            </NutritionDetails>
        </ID>
    </Record>
</Records>
marc_s

成功创建正确,有效的XML之后,您应该可以使用以下T-SQL代码获取详细信息:

SELECT
    -- get the attributes from the <ID> node
    IDSpecNum = XC.value('(ID/@SpecNum)[1]', 'int'),
    IDIsseNum = XC.value('(ID/@IssueNum)[1]', 'int'),
    IDSpecStatus = XC.value('(ID/@SpecStatus)[1]', 'varchar(100)'),
    -- get the element values from the children of the <NutrientFacts> node
    NutrientNameId = NUT.value('(NutrientNameId)[1]', 'varchar(100)'),
    NutrientName = NUT.value('(NutrientName)[1]', 'varchar(100)'),
    NutrientPer100gUnrounded = NUT.value('(NutrientPer100gUnrounded)[1]', 'decimal(20,4)'),
    NutrientPer100gRounded = NUT.value('(NutrientPer100gRounded)[1]', 'decimal(20,4)')
FROM
    dbo.YourTable
CROSS APPLY
    -- get one XML fragment per <Record>
    XmlData.nodes('/Records/Record') AS XT(XC)
CROSS APPLY
    -- get one XML fragment per <NutrientFacts> inside
    XC.nodes('ID/NutritionDetails/NutrientFacts') AS XT2(NUT)

第一个CROSS APPLY基本上得到一个“内联伪表”,其中<Record>XmlData列中为XML中的每个节点提供一个XML片段(这只是我的一个假设-适应您的现实!)。这些XML片段只有XT一列称为“伪表” XC

使用该XC列的XML片段,您可以“进入”并从<ID>节点中的节点获取属性值<Record>-这是前三个值。

然后,基于XT伪表,我将另一个应用CROSS APPLY<NutrientFacts>内部所有节点<ID> / <NutritionDetails>-那些被XT2称为带有column的伪表NUT,该又为每个<NutrientFacts>节点保存一个XML片段我进入该XML节点并从该节点的子元素中提取值-这些是select中显示的四个附加值。

现在您有了一个SELECT返回所有值的-您可以轻松获得所需的那些位并在INSERT INTO dbo.MyTable(list-of-columns) SELECT list-of-columns :......方案中使用它们请享用!

更新:将XML文件从磁盘(SQL Server计算机的文件系统上的本地磁盘)导入磁盘到表中-使用类似以下命令:

INSERT INTO dbo.YourTable(XmlData)
    SELECT 
        CONVERT(XML, BulkColumn) AS BulkColumn
    FROM 
        OPENROWSET(BULK 'C:\temp\records.xml', SINGLE_BLOB) AS x;

再次:适应您的需求-我不知道您是否要在其中插入其他信息dbo.YourTable-我什至不知道您的表名;您可以一次从磁盘加载一个XML

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章