繁体   English   中英

从 SQL Server 中的 XML 数据中查找值?

[英]Find the value from XML data in SQL Server?

我想从 SQL Server 表中的 XML 数据中找到值。

下面是我的示例 xmldata;

<wddxPacket version="1.0">
   <header />
   <data>
      <struct type="xyz">
         <var name="TXRGHC43">
            <string />
         </var>
         <var name="TWBS1">
             <string>9011750</string>
         </var>
         <var name="PMNAMEID">
            <string>2323443</string>
         </var>

         <var name="EDATE36">
            <string />
         </var>

         <var name="TWBSDESC40">
            <string />
         </var>

      </struct>
   </data>
</wddxPacket>

我在TWBS1下搜索9011750 你能帮我解决这个问题吗? 如何找到9011750值。

我正在尝试以下查询,但没有得到任何输出。

select
  col
from
  xyz
where
  col.value('(/wddxPacket/data/struct/var[TWBS1])[2]', 'varchar(max)') like '9011750'

SELECT col.value('(/wddxPacket/data/struct/var/string)[3]', 'varchar(100)')
FROM   xyz

我的要求是搜索整个表的数据,即仅示例 xml 数据。

请尝试以下 SQL。 它展示了如何在XPath表达式中使用谓词来模拟WHERE子句。

SQL

-- DDL and sample data population, start
DECLARE @tbl TABLE (ID INT IDENTITY PRIMARY KEY, xmldata XML);
INSERT INTO @tbl (xmldata)
VALUES
(N'<wddxPacket version="1.0">
    <header/>
    <data>
        <struct type="xyz">
            <var name="TXRGHC43">
                <string/>
            </var>
            <var name="TWBS1">
                <string>9011750</string>
            </var>
            <var name="PMNAMEID">
                <string>2323443</string>
            </var>
            <var name="EDATE36">
                <string/>
            </var>
            <var name="TWBSDESC40">
                <string/>
            </var>
        </struct>
    </data>
</wddxPacket>');
-- DDL and sample data population, end

DECLARE @varName VARCHAR(20) = 'TWBS1';

SELECT c.value('(./text())[1]','INT') AS [string_value]
FROM @tbl AS tbl
    CROSS APPLY tbl.xmldata.nodes('/wddxPacket/data/struct/var[@name=sql:variable("@varName")]/string') AS t(c);

输出

+--------------+
| string_value |
+--------------+
|      9011750 |
+--------------+

暂无
暂无

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

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