Xpath 如何在sql查询中获取xmlelement的子级而不使用其名称?
在sql server xml列中,我有如下xml:Xpath 如何在sql查询中获取xmlelement的子级而不使用其名称?,xpath,xquery-sql,Xpath,Xquery Sql,在sql server xml列中,我有如下xml: <Test> <Operations> <Operations type="OperationSend"> <OperationSend> <ToCompanyId>1</ToCompanyId> &
<Test>
<Operations>
<Operations type="OperationSend">
<OperationSend>
<ToCompanyId>1</ToCompanyId>
<Date>2011-05-01T00:00:00</Date>
</OperationSend>
</Operations>
<Operations type="OperationSell">
<OperationSell>
<ToCompanyId>33</ToCompanyId>
<Amount>12</Amount>
</OperationSell>
</Operations>
<Operations type="OperationEdit">
<OperationEdit>
<ToCompanyId>12</ToCompanyId>
<Date>2011-11-01T00:00:00</Date>
</OperationEdit>
</Operations>
</Operations>
</Test>
假设您已经将xml设置为一个名为@x的变量,那么这就是如何获得12
select x.header.value('.', 'int')
from @x.nodes('//Test/Operations/Operations[last()]/OperationSend/ToCompanyId')
as x(header)
从表的列中获取的查询可能略有不同,但XPATH是相同的
select testxml.query('//Test/Operations/Operations[last()]/OperationSend/ToCompanyId') from dbo.MyXmlTable
假设您已经将xml设置为一个名为@x的变量,那么这就是如何获得12
select x.header.value('.', 'int')
from @x.nodes('//Test/Operations/Operations[last()]/OperationSend/ToCompanyId')
as x(header)
从表的列中获取的查询可能略有不同,但XPATH是相同的
select testxml.query('//Test/Operations/Operations[last()]/OperationSend/ToCompanyId') from dbo.MyXmlTable
将节点()替换为
node()匹配任何类型的所有节点Putnode()而不是
node()匹配任何类型的所有节点您可以使用
*
select testxml.query('(/Test/Operations/Operations)[last()]/*/ToCompanyId').value('.', 'int')
from MyXmlTable
您可以使用
*
select testxml.query('(/Test/Operations/Operations)[last()]/*/ToCompanyId').value('.', 'int')
from MyXmlTable
您需要考虑一种更精确的节点测试,而不仅仅是
node()
。提示:请参阅Mikael Eriksson的答案。您需要考虑一个更精确的节点测试,而不仅仅是node()
。提示:请参阅Mikael Eriksson的答案。我建议您接受最好的答案——在本例中是由@Mikael Eriksson给出的。我建议您接受最好的答案——在本例中是由@Mikael Eriksson给出的。