在SQL Server中读取动态XML节点

标记

我具有以下XML结构:

set @MailXML =
'<MailingCompany>
    <Mailman>
        <Name>Jamie</Name>
            <Age> 24 </Age>
            <Letter>
            <DestinationAddress> 440 Mountain View Parade </DestinationAddress>
            <DestinationCountry> USA </DestinationCountry>
                <OriginCountry> Australia </OriginCountry>
            <OriginAddress> 120 St Kilda Road </OriginAddress>
            </Letter>
    </Mailman>
</MailingCompany>'

我的SQL当前看起来像这样:

-- Mail Insertion
INSERT INTO mailDB.dbo.Mailman
   SELECT
       m.value('Name[1]','varchar(50)') as Name,
       m.value('Age[1]','varchar(50)') as Age
   FROM 
       @MailXML.nodes('/MailingCompany/Mailman') as A(m)

SET @MailPersonFK = SCOPE_IDENTITY();

-- Letter Insertion
INSERT INTO mailDB.dbo.Letter
    SELECT 
        l.value('DestinationAddress[1]', 'varchar(50)') as DestinationAddress,
        l.value('DestinationCountry[1]', 'varchar(50)') as DestinationCountry,
        l.value('OriginCountry[1]', 'varchar(50)') as OriginCountry,
        l.value('OriginAddress[1]', 'varchar(50)') as OriginAddress
        @MailPersonFK as MailID
    FROM  
        @MailXML.nodes('MailingCompany/Mailman/Letter') as B(l)

我正在尝试将Mailman和信函数据提取到各自的表中。我已经开始工作了,但是我的问题是MailCompany节点是动态的。有时,它可能是MailVehicle,例如,我仍然需要阅读相应的MailmanLetter节点的数据,并把它们插入到自己相应的表。

所以两者

FROM @MailXML.nodes('/MailingCompany/Mailman') as A(t)

FROM @MailXML.nodes('MailingCompany/Mailman/Letter') as B(l)

需要进行更改以使其MailingCompany具有动态性。

我尝试提取父节点并将其连接成一个字符串,以放入.nodes函数中,如下所示:

set @DynXML = '/' + @parentNodeVar + '/Mailman'

FROM @MailXML.nodes(@DynXML) as A(t)

但是我收到以下错误:

XML数据类型方法“节点”的参数1必须是字符串文字。

如何克服这个动态XML问题?

提前非常感谢你

Shnugo

看这个简化的例子:

DECLARE @xml1 XML=
N'<MailingCompany>
  <Mailman>
    <Name>Jamie</Name>
    <Letter>
      <DestinationAddress> 440 Mountain View Parade </DestinationAddress>
    </Letter>
  </Mailman>
</MailingCompany>';

DECLARE @xml2 XML=
N'<OtherName>
  <Mailman>
    <Name>Jodie</Name>
    <Letter>
      <DestinationAddress> This is the other address </DestinationAddress>
    </Letter>
  </Mailman>
</OtherName>';

SELECT @xml1.value(N'(*/Mailman/Name)[1]','nvarchar(max)') AS Mailman_Name
      ,@xml1.value(N'(*/Mailman/Letter/DestinationAddress)[1]','nvarchar(max)') AS DestinationAddress
SELECT @xml2.value(N'(*/Mailman/Name)[1]','nvarchar(max)') AS Mailman_Name
      ,@xml2.value(N'(*/Mailman/Letter/DestinationAddress)[1]','nvarchar(max)') AS DestinationAddress

您可以用替换节点的名称*

另一个技巧是使用(与之前相同的结果)进行深度搜索//

SELECT @xml1.value(N'(//Name)[1]','nvarchar(max)') AS Mailman_Name
      ,@xml1.value(N'(//DestinationAddress)[1]','nvarchar(max)') AS DestinationAddress
SELECT @xml2.value(N'(//Name)[1]','nvarchar(max)') AS Mailman_Name
      ,@xml2.value(N'(//DestinationAddress)[1]','nvarchar(max)') AS DestinationAddress

一般规则:尽可能具体。

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

从SQL Server中的XML读取子节点及其父属性

来自分类Dev

使用条件语句将'xml'节点动态导入到SQL Server中

来自分类Dev

使用条件语句将'xml'节点动态导入到SQL Server中

来自分类Dev

在SQL Server中更新XML节点

来自分类Dev

跟踪SQL Server中XML节点的流

来自分类Dev

从SQL Server中的XML文件删除节点

来自分类Dev

跟踪SQL Server中XML节点的流

来自分类Dev

在SQL Server 2012中读取具有动态行和属性的xml

来自分类Dev

SQL XML中的动态XML节点名称

来自分类Dev

在SQL Server中读取XML重复标签

来自分类Dev

在SQL Server中读取xml文件

来自分类Dev

T-SQL在动态XML结构中查找节点

来自分类Dev

从SQL Server 2005中的列中获取查询的xml节点

来自分类Dev

将XML节点转换为SQL Server中的行

来自分类Dev

SQL Server中两个xml节点的数值比较

来自分类Dev

在SQL Server中的XML节点上进行多目标搜索

来自分类Dev

将XML节点插入SQL Server中的表

来自分类Dev

将XML节点转换为SQL Server中的行

来自分类Dev

如何在SQL Server中根据条件获取xml节点

来自分类Dev

在SQL Server 2008中删除XML子节点元素

来自分类Dev

如何在SQL Server中求和XML节点值

来自分类Dev

拉取 SQL Server 中的所有子 XML 节点

来自分类Dev

在SQL Server中的存储过程中读取xml的问题

来自分类Dev

在SQL Server中的存储过程中读取xml的问题

来自分类Dev

从SQL列读取XML节点值

来自分类Dev

SQL Server中的动态SQL

来自分类Dev

SQL Server:读取XML数据

来自分类Dev

在SQL Server中读取和拆分XML重复标签

来自分类Dev

使用SQL Server从复杂的XML结构中读取值