简体   繁体   English

SQL Select:从XML字段中获取值

[英]SQL Select: Take value from XML field

I'm struggling to pull a value out of an XML field using SQL Select Statement. 我正在努力使用SQL Select语句从XML字段中提取一个值。

The XML field is Info, the table is results. XML字段是Info,表是结果。

<Screens>
  <Results>
    <Result ID="54722094-8b36-4a01-b089-3ecabebbf962" DataResponse="" 
          DataAction="" DataValue="2" DataScore="0" />
  </Results>
</Screens>

I need to pull the attribute DataValue . 我需要拉取属性DataValue For the record above, I'd be looking for 2. 对于上面的记录,我会寻找2。

Any help would be greatly appreciated. 任何帮助将不胜感激。

With SQL Server it was this: 使用SQL Server就是这样的:

DECLARE @xml XML=
'<Screens>
  <Results>
    <Result ID="54722094-8b36-4a01-b089-3ecabebbf962" DataResponse="" 
          DataAction="" DataValue="2" DataScore="0" />
  </Results>
</Screens>';

SELECT @xml.value('(/Screens/Results/Result/@DataValue)[1]','int') AS DataValue

EDIT: Data comes from a table 编辑:数据来自一个表

Just replace my @tbl with your actual table 只需用您的实际表替换我的@tbl

--test scenario with two data rows, one has DataValue=2 the other =99
DECLARE @tbl TABLE(ID INT IDENTITY,info XML);
INSERT INTO @tbl(info) VALUES
 (
    '<Screens>
      <Results>
        <Result ID="54722094-8b36-4a01-b089-3ecabebbf962" DataResponse="" 
              DataAction="" DataValue="2" DataScore="0" />
      </Results>
    </Screens>'
 )
,(
    '<Screens>
      <Results>
        <Result ID="54722094-8b36-4a01-b089-3ecabebbf962" DataResponse="" 
              DataAction="" DataValue="99" DataScore="0" />
      </Results>
    </Screens>'
 );

--this is the query
SELECT info.value('(/Screens/Results/Result/@DataValue)[1]','int') AS DataValue
FROM @tbl

The result is 2 and 99 结果是2和99

I assume that one Results element ( s ) can have one or more Result subelements: 我认为一个Results元件( s )可以具有一个或多个Result的子元素:

DECLARE @x XML
SET @x = N'<Screens>
  <Results>
    <Result ID="54722094-8b36-4a01-b089-3ecabebbf962" DataResponse="" 
          DataAction="" DataValue="2" DataScore="0" />
    <Result ID="54722094-8b36-4a01-b089-aaaaaaaaaaaa" DataResponse="" 
          DataAction="" DataValue="3" DataScore="0" />
  </Results>
</Screens>'

SELECT  x.XmlCol.value('(@DataValue)[1]', 'INT') AS DataValueAsINT
FROM    @x.nodes(N'Screens/Results/Result') x(XmlCol)

Results: 结果:

DataValueAsINT
--------------
2
3

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM