结合多个xml标签

时间:2018-07-21 08:56:32

标签: sql-server xml tsql parsing

我在Sql Server中使用xml存在一些问题。我不能在一个变量sql中合并多个xml标记。

我需要组合名字姓氏父亲名字

<BODY>
  <type>insert</type>
  <table_name>Customer</table_name>
  <First_name>Мирмухаммедов</First_name>
  <Last_name>Мирмухаммедов</Last_name>
  <Father_name>Rahmonovich</Father_name>
  <Birth_date>12.12.2018</Birth_date>
  <Country>Dushanbe</Country>
</BODY>

2 个答案:

答案 0 :(得分:1)

您可以这样做:

set @fullName = (
    select CONCAT
    (
        c.value('First_name[1]', 'NVARCHAR(200)'),
        ' ',
        c.value('Last_name[1]', 'NVARCHAR(200)'),
        ' ',
        c.value('Father_name[1]', 'NVARCHAR(200)')
    )
    from @XML.nodes('BODY') T(c)
)

答案 1 :(得分:0)

set @fullName=CONCAT((select T2.col.value('.[1]','VARCHAR(200)') from @XML.nodes('BODY') T(c) Cross APPLY t.c.nodes('/BODY/*') as T2(col) where T2.col.value('local-name(.)','VARCHAR(200)')='First_name'
),' ' +(select T2.col.value('.[1]','VARCHAR(200)') from @XML.nodes('BODY') T(c) Cross APPLY t.c.nodes('/BODY/*') as T2(col) where T2.col.value('local-name(.)','VARCHAR(200)')='Last_name'
),' '+(select T2.col.value('.[1]','VARCHAR(200)') from @XML.nodes('BODY') T(c) Cross APPLY t.c.nodes('/BODY/*') as T2(col) where T2.col.value('local-name(.)','VARCHAR(200)')='Father_name'
))