[英]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.