如何将重复的标签/字符串数据插入表中

Posted

技术标签:

【中文标题】如何将重复的标签/字符串数据插入表中【英文标题】:How can i insert duplicate tag/string data into table 【发布时间】:2019-09-09 09:47:37 【问题描述】:

您好,我在从复杂字符串中读取数据时遇到问题。

我必须在字符串<deviMessage> 之后读取数据并插入到表中。读取数据的问题是<deviMessage> 是重复标签,我必须读取所有标签<deviMessage> 并插入到表格中。

<loan>&lt;applicant&gt;&lt;partyReference&gt;string&lt;/partyReference&gt;&lt;
deviations&gt;&lt;deviMessage&gt;read this data&lt;/deviMessage&gt;&lt;deviSeverity&gt;L2&lt;/deviSeverity&gt;&lt;approvalAuth&gt;CCM&lt;/approvalAuth&gt;&lt;istest&gt;NO&lt;/istest&gt;&lt;/deviations&gt;
deviations&gt;&lt;deviMessage&gt;read thid data2&lt;/deviMessage&gt;&lt;deviSeverity&gt;L2&lt;/deviSeverity&gt;&lt;approvalAuth&gt;CCM&lt;/approvalAuth&gt;&lt;istest&gt;NO&lt;/istest&gt;&lt;/deviations&gt;
&lt;Numerator&gt;0.036848584684376046&lt;/Numerator&gt;</loan>

【问题讨论】:

你的后端数据库是什么? Postgres,mysql 微软 sql 服务器 有人试过这样的吗? 你有和上面一样的换行符吗?还是您手动输入的? 已手动输入换行符以便更好地理解,因为我的结果是单行的。像 < 这样的符号>只带结果 【参考方案1】:

这个 XML 只是一个节点 &lt;loan&gt;content&lt;/loan&gt;,其中 content 是一个嵌入的 XML。

如果你从 XML 中读取它,它看起来像这样:

注意:我没有纠正一些错误!

<applicant>
    <partyReference>string</partyReference>
    <deviations>
        <deviMessage>read this data</deviMessage>
        <deviSeverity>L2</deviSeverity>
        <approvalAuth>CCM</approvalAuth>
        <istest>NO</istest>
    </deviations>
    deviations>
        <deviMessage>read thid data2</deviMessage>
        <deviSeverity>L2</deviSeverity>
        <approvalAuth>CCM</approvalAuth>
        <istest>NO</istest>
    </deviations>
    <Numerator>0.036848584684376046</Numerator>

在第二个&lt;deviations&gt; 之前缺少一个&lt;,而结尾的&lt;/applicant&gt; 也缺少...

如果这是您的真实数据,那么您就处于一团糟...

修复输入中的这些错误后(希望您嵌入的 XML 是有效的 XML)。你可以这样做:

DECLARE @YourXML XML='<loan>&lt;applicant&gt;&lt;partyReference&gt;string&lt;/partyReference&gt;&lt;deviations&gt;&lt;deviMessage&gt;read this data&lt;/deviMessage&gt;&lt;deviSeverity&gt;L2&lt;/deviSeverity&gt;&lt;approvalAuth&gt;CCM&lt;/approvalAuth&gt;&lt;istest&gt;NO&lt;/istest&gt;&lt;/deviations&gt;&lt;deviations&gt;&lt;deviMessage&gt;read thid data2&lt;/deviMessage&gt;&lt;deviSeverity&gt;L2&lt;/deviSeverity&gt;&lt;approvalAuth&gt;CCM&lt;/approvalAuth&gt;&lt;istest&gt;NO&lt;/istest&gt;&lt;/deviations&gt;&lt;Numerator&gt;0.036848584684376046&lt;/Numerator&gt;&lt;/applicant&gt;</loan>';

SELECT CAST(@YourXML.value('.','nvarchar(max)') AS XML);

对于这个修复后的 XML,您可以通过以下查询获取数据:

DECLARE @YourXML XML='<loan>&lt;applicant&gt;&lt;partyReference&gt;string&lt;/partyReference&gt;&lt;deviations&gt;&lt;deviMessage&gt;read this data&lt;/deviMessage&gt;&lt;deviSeverity&gt;L2&lt;/deviSeverity&gt;&lt;approvalAuth&gt;CCM&lt;/approvalAuth&gt;&lt;istest&gt;NO&lt;/istest&gt;&lt;/deviations&gt;&lt;deviations&gt;&lt;deviMessage&gt;read thid data2&lt;/deviMessage&gt;&lt;deviSeverity&gt;L2&lt;/deviSeverity&gt;&lt;approvalAuth&gt;CCM&lt;/approvalAuth&gt;&lt;istest&gt;NO&lt;/istest&gt;&lt;/deviations&gt;&lt;Numerator&gt;0.036848584684376046&lt;/Numerator&gt;&lt;/applicant&gt;</loan>';

SELECT TheXml.value('(/applicant/partyReference/text())[1]','nvarchar(150)') AS PartyReference
        ,devs.value('(deviMessage/text())[1]','nvarchar(150)') AS deviMessage  
        ,devs.value('(deviSeverity/text())[1]','nvarchar(150)') AS deviSeverity  
        ,devs.value('(approvalAuth/text())[1]','nvarchar(150)') AS approvalAuth  
        ,devs.value('(istest/text())[1]','nvarchar(150)') AS istest  
        ,TheXml.value('(/applicant/Numerator/text())[1]','NUMERIC') AS Numerator
FROM (SELECT CAST(@YourXML.value('.','nvarchar(max)') AS XML)) AS tbl(TheXml)
CROSS APPLY TheXml.nodes('/applicant/deviations') A(devs);

结果

+----------------+-----------------+--------------+--------------+--------+-----------+
| PartyReference | deviMessage     | deviSeverity | approvalAuth | istest | Numerator |
+----------------+-----------------+--------------+--------------+--------+-----------+
| string         | read this data  | L2           | CCM          | NO     | 0         |
+----------------+-----------------+--------------+--------------+--------+-----------+
| string         | read thid data2 | L2           | CCM          | NO     | 0         |
+----------------+-----------------+--------------+--------------+--------+-----------+

【讨论】:

可以将相同的结果转换成列

以上是关于如何将重复的标签/字符串数据插入表中的主要内容,如果未能解决你的问题,请参考以下文章

如何防止将重复数据插入到值为多个的 SQL Server 表中

如何将数据库表中的一个值和 $_POST 中的另一个值插入另一个数据库表[重复]

sql server里如何将一组用逗号分隔的字符串分解并插入到另一张表中,比如:11873,27827, 也可能是好多

如何从一个表列中获取值,将它们与字符串连接并将它们插入另一个表中?

使用文件名参数批量插入 [重复]

SQL语句 如何将已知数据和查询一个表中的数据一起插入另一个表