如何将重复的标签/字符串数据插入表中
Posted
技术标签:
【中文标题】如何将重复的标签/字符串数据插入表中【英文标题】:How can i insert duplicate tag/string data into table 【发布时间】:2019-09-09 09:47:37 【问题描述】:您好,我在从复杂字符串中读取数据时遇到问题。
我必须在字符串<deviMessage>
之后读取数据并插入到表中。读取数据的问题是<deviMessage>
是重复标签,我必须读取所有标签<deviMessage>
并插入到表格中。
<loan><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></loan>
【问题讨论】:
你的后端数据库是什么? Postgres,mysql? 微软 sql 服务器 有人试过这样的吗? 你有和上面一样的换行符吗?还是您手动输入的? 已手动输入换行符以便更好地理解,因为我的结果是单行的。像 < 这样的符号>只带结果 【参考方案1】:这个 XML 只是一个节点 <loan>content</loan>
,其中 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>
在第二个<deviations>
之前缺少一个<
,而结尾的</applicant>
也缺少...
如果这是您的真实数据,那么您就处于一团糟...
修复输入中的这些错误后(希望您嵌入的 XML 是有效的 XML)。你可以这样做:
DECLARE @YourXML XML='<loan><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></applicant></loan>';
SELECT CAST(@YourXML.value('.','nvarchar(max)') AS XML);
对于这个修复后的 XML,您可以通过以下查询获取数据:
DECLARE @YourXML XML='<loan><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></applicant></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, 也可能是好多