如何从XML元素在SQL Server中的特定属性
我有类似如下XML在表中的列:如何从XML元素在SQL Server中的特定属性
<?xml version="1.0" encoding="utf-8"?>
<container>
<param name="paramA" value="valueA" />
<param name="paramB" value="valueB" />
...
</container>
我试图通过TSQL获得VALUEB部分出了XML的
到目前为止,我正在获得正确的节点,但现在我无法弄清楚如何获取属性。
select xmlCol.query('/container/param[@name="paramB"]') from LogTable
我想我可以在最后添加/ @值,但是SQL告诉我属性必须是节点的一部分。我可以找到很多用于选择子节点属性的示例,但是兄弟节点属性中没有任何示例(如果这是正确的术语)。
任何帮助,将不胜感激。
尝试使用.value
函数,而不是.query
:
SELECT
xmlCol.value('(/container/param[@name="paramB"]/@value)[1]', 'varchar(50)')
FROM
LogTable
XPath表达式可能返回节点列表,因此你需要一个[1]
添加到潜在的名单告诉SQL Server使用第一的那些条目(是的 - 该列表是基于1的 - 不是基于0的)。作为第二个参数,您需要指定值应该转换为什么类型 - 只是在这里猜测。
马克
根据您的XML的实际结构,这可能是有用的把视图超过它,使其更易于使用消耗“常规” SQL如
CREATE VIEW vwLogTable
AS
SELECT
c.p.value('@name', 'varchar(10)') name,
c.p.value('@value', 'varchar(10)') value
FROM
LogTable
CROSS APPLY x.nodes('/container/param') c(p)
GO
-- now you can get all values for paramB as...
SELECT value FROM vwLogTable WHERE name = 'paramB'
为什么xmlCol.value('(/ container/param [@ name =“paramB”]/@ value)[1]','varchar(50)')对我无效,只是.value('@ value' ,'vharchar(50)')确实有效? Hmmmmm。 – AndyClaw 2013-08-28 18:58:01
$doc/param[@value = "valueB"]/fn:data(@value)
假设$ doc有Xml。
谢谢。正是我需要的。 – 2009-10-13 16:12:49
我在该领域的动态节点像 通过使用您给予的查询我能够根据索引读取。意思当我给索引作为1时,它将显示2,当我给索引2时,它将显示5,但我需要两个节点。所以你会建议我怎么做! –
pixelbyaj
2013-09-13 07:34:03
我有麻烦使用这个布尔值。我尝试使用'布尔'和'System.Boolean'作为第二个参数,并收到错误。如果我做varchar它会返回所有空值。我的xml行如下所示: –
Zac
2015-01-06 16:32:54