如何将XML和INSERT中的标记拆分到SQL Server

时间:2018-09-09 07:45:12

标签: sql sql-server xml

我想将EC值拆分,然后将INSERT拆分为SQL Server中的一个表,但是此ROW上的第一个UPDATE

我的XML标签:

<Relations mfid="SubjectMaj_My">
   <Form EC="19" ETC="712" Value="temp1" />
   <Form EC="1" ETC="712" Value="temp2" />
   <Form EC="37" ETC="712" Value="temp3" />
</Relations>

当我SELECT在我的桌子上时:

SELECT [SubjectMaj_My] 
FROM AB_Warehouse.dbo.Maless_Letters

我得到这样的价值(其中一些只是一种标签形式,但有些可以超过一种标签形式!):

<Relations mfrid="SubjectMaj_My"><Form EC="6" ETC="712" Value="uy" Token="e29c2aeeb0a340818f460d47a7faa8a2" /></Relations>
<Relations mfrid="SubjectMaj_My"><Form EC="47" ETC="712" Value="gg" Token="e773c5a4949c4b639b41f4f49a120845" /></Relations>
<Relations mfrid="SubjectMaj_My"><Form EC="7" ETC="712" Value="aa" Token="87068cc61c2944a782fe6be9473f064c" /></Relations>
<Relations mfrid="SubjectMaj_My"><Form EC="47" ETC="712" Value="asdsa" Token="742ca91fbd77424799084fa0c56e63c7" /></Relations>
<Relations mfrid="SubjectMaj_My"><Form EC="6" ETC="712" Value="asdd" Token="8efbf5745d39459c8c23cf7bfc36bf75" /></Relations>
<Relations mfrid="SubjectMaj_My"><Form EC="26" ETC="712" Value="ff" Token="b74d6ab0ffa642be98cf7972c9f1041a" /></Relations>
<Relations mfid="SubjectMaj_My"><Form EC="19" ETC="712" Value="temp1" /><Form EC="1" ETC="712" Value="temp2" /><Form EC="37" ETC="712" Value="temp3" /></Relations>

1 个答案:

答案 0 :(得分:1)

下次请阅读how to create an MCVE

我不知道您的桌子,所以您必须对此进行调整,但是可以尝试一下:

SELECT l.SomeColumnToIdentifyTheRow
      ,frm.value(N'@EC',N'int') AS Form_EC
      ,frm.value(N'@ETC',N'int') AS Form_ETC
      ,frm.value(N'@Value',N'nvarchar(max)') AS Form_EC
FROM AB_Warehouse.dbo.Maless_Letters l
OUTER APPLY [SubjectMaj_My].nodes(N'/Relations/Form') A(frm);

这将从表中的每一行开始,并从每种XML中创建一个派生表。结合XML的方法APPLY使用.nodes()完成。

这将返回以行分隔的所有重复元素。从那里我们可以读取属性的值。