【发布时间】:2014-10-24 12:41:02
【问题描述】:
我需要在 XML 数据类型列中获取节点值。
<CustomContentData>
<prpIsRSSFeed>false</prpIsRSSFeed>
</CustomContentData>
这是如何在 SQL Server 中完成的?
列名是ClassXML
【问题讨论】:
标签: sql sql-server xml sql-server-2008-r2
我需要在 XML 数据类型列中获取节点值。
<CustomContentData>
<prpIsRSSFeed>false</prpIsRSSFeed>
</CustomContentData>
这是如何在 SQL Server 中完成的?
列名是ClassXML
【问题讨论】:
标签: sql sql-server xml sql-server-2008-r2
使用XQuery,您的数据的一个简单示例是:
DECLARE @T TABLE (ClassXML XML);
INSERT @T (ClassXML)
VALUES ('<CustomContentData>
<prpIsRSSFeed>false</prpIsRSSFeed>
</CustomContentData>');
SELECT t.ClassXML.value('CustomContentData[1]/prpIsRSSFeed[1]', 'VARCHAR(5)')
FROM @T AS t;
【讨论】:
如果列在 SQL Server 中已经是 XML 数据类型,那么下面的代码应该可以通过使用带有 XPATH 的值函数来工作。如果它存储为 varchar,则只需将 ClassXML.value 替换为 CONVERT(XML, ClassXML).value。希望这会有所帮助!
DECLARE @Data TABLE (ClassXML XML)
INSERT @Data VALUES ('<CustomContentData><prpIsRSSFeed>false</prpIsRSSFeed></CustomContentData>')
SELECT
CONVERT(BIT, CASE WHEN ClassXML.value ('(/CustomContentData/prpIsRSSFeed)[1]',
'VARCHAR(50)') = 'true' THEN 1 ELSE 0 END) AS IsRssFeed
FROM @Data
产量输出
IsRssFeed
---------
0
【讨论】: