从字段XML中提取值?

时间:2017-01-09 22:04:12

标签: sql-server tsql

(使用SQL Server 2016标准)

我的桌子"人物#34;我有一个NVARCHAR(MAX)字段,名为" Log"。

这是该日志中的内容示例:

<?xml version="1.0" encoding="iso-8859-1" ?>
<ArrayOfLogItem xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <LogItem>
        <OldValue xsi:type="xsd:decimal">40</OldValue>
        <NewValue xsi:type="xsd:decimal">41</NewValue>
        <FieldName>age</FieldName>
    </LogItem>
    <LogItem>
        <OldValue xsi:type="xsd:decimal">2000</OldValue>
        <NewValue xsi:type="xsd:decimal">2100</NewValue>
        <FieldName>salary</FieldName>
    </LogItem>
    <LogItem>
        <OldValue xmlns:q1="http://microsoft.com/wsdl/types/" xsi:type="q1:guid">e5e6aa24-4f2f-437d-bf16-21724e9c61b2</OldValue>
        <NewValue xmlns:q2="http://microsoft.com/wsdl/types/" xsi:type="q2:guid">370cee00-f51a-4bf0-a8bf-c0f1de025a0a</NewValue>
        <FieldName>user_ID</FieldName>
    </LogItem>
</ArrayOfLogItem>

我需要弄清楚,如果日志字段的行包含字段名&#34; salary&#34; - 如果是这样,我需要提取旧值(2000)和新值(2100)。

这可能吗?

这是我达到的目标......

DECLARE @xml xml
SET @xml = 
'<?xml version="1.0" encoding="iso-8859-1" ?>
<ArrayOfLogItem xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <LogItem>
        <OldValue xsi:type="xsd:decimal">40</OldValue>
        <NewValue xsi:type="xsd:decimal">41</NewValue>
        <FieldName>age</FieldName>
    </LogItem>
    <LogItem>
        <OldValue xsi:type="xsd:decimal">2000</OldValue>
        <NewValue xsi:type="xsd:decimal">2100</NewValue>
        <FieldName>salary</FieldName>
    </LogItem>
    <LogItem>
        <OldValue xmlns:q1="http://microsoft.com/wsdl/types/" xsi:type="q1:guid">e5e6aa24-4f2f-437d-bf16-21724e9c61b2</OldValue>
        <NewValue xmlns:q2="http://microsoft.com/wsdl/types/" xsi:type="q2:guid">370cee00-f51a-4bf0-a8bf-c0f1de025a0a</NewValue>
        <FieldName>user_ID</FieldName>
    </LogItem>
</ArrayOfLogItem>'

SELECT   ???

......我被困了。

有没有想过是否可能?

由于

0 个答案:

没有答案