我有一个SQL Server数据库表,其中的列名为XML
,其中包含XML数据,其结构如下:
<Item xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://test/data">
<Roots>
<Root>
<Name>Field Name</Name>
<Value>Field Value</Value>
</Root>
<Root>
<Name>Field Name</Name>
<Value>Field Value</Value>
</Root>
</Roots>
我想使用T-SQL来获得Value
,其中Name = Total
。我已经尝试了以下方法,但是它没有返回任何数据:
SELECT [XML]
FROM [BusinessAccount]
WHERE [XML].value('(/Root/Name)[13]', 'VARCHAR(MAX)') LIKE '%Total%'
如果有人可以告诉我我哪里出问题了?
答案 0 :(得分:2)
您缺少XML必需的Matrix operator+(const T &a) {
Matrix<row, col, T> result;
for (int i = 0; i < row; ++i) {
for (int j = 0; j < col; ++j) {
result.elements[i][j] = elements[i][j] + a;
}
}
return result;
}
,并且路径不正确。
如果您想返回第13个元素由文本WITH XMLNAMESPACES
组成的行,则可以使用以下内容。
Total
否则,您可以将WITH XMLNAMESPACES (DEFAULT 'http://test/data')
SELECT [XML]
FROM [BusinessAccount]
WHERE 1 = [XML].exist('(/Item/Roots/Root/Name)[13][text() = "Total"]')
添加到原始查询中,并在那里也修复路径。
答案 1 :(得分:1)
您需要指定名称空间。然后,您可以匹配<Name>
和<Value>
对,并提取<Value>
的内容,如下所示:
SELECT NameNode.value('declare namespace x="http://test/data"; (../x:Value)[1]', 'varchar(100)')
FROM [BusinessAccount]
CROSS APPLY [XML].nodes('declare namespace x="http://test/data"; //x:Root/x:Name') AS n(NameNode)
WHERE NameNode.value('.', 'varchar(100)') = 'Total'