Sql 搜索xml列的所有节点
我正在寻找一种方法来搜索SQLXML列中的所有节点 例如,如果我有以下XMLSql 搜索xml列的所有节点,sql,xml,sql-server-2008,tsql,Sql,Xml,Sql Server 2008,Tsql,我正在寻找一种方法来搜索SQLXML列中的所有节点 例如,如果我有以下XML <ArrayOfEntityPropertyOfString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <EntityPropertyOfString> <Name>User Label 1</Name&
<ArrayOfEntityPropertyOfString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<EntityPropertyOfString>
<Name>User Label 1</Name>
<Value>TX 12107210</Value>
</EntityPropertyOfString>
<EntityPropertyOfString>
<Name>User Label 2</Name>
<Value>BONUS $350/DAY</Value>
</EntityPropertyOfString>
<EntityPropertyOfString>
<Name>User Defined Date 9</Name>
<Value>11/09/2011</Value>
</EntityPropertyOfString>
</ArrayOfEntityPropertyOfString>
用户标签1
德克萨斯州12107210
用户标签2
奖金350美元/天
用户定义日期9
11/09/2011
如何搜索包含“奖金”一词的所有值
提前谢谢你。如果你能假设奖金永远不会出现在标签上
SELECT
...
FROM
...
WHERE COL_NAME LIKE '%bonus%'
对于一张桌子,它可以如下所示:
declare @T table (ID int identity primary key, XMLCol xml)
declare @xml xml =
'<ArrayOfEntityPropertyOfString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<EntityPropertyOfString>
<Name>User Label 1</Name>
<Value>TX 12107210</Value>
</EntityPropertyOfString>
<EntityPropertyOfString>
<Name>User Label 2</Name>
<Value>BONUS $350/DAY</Value>
</EntityPropertyOfString>
<EntityPropertyOfString>
<Name>User Defined Date 9</Name>
<Value>11/09/2011</Value>
</EntityPropertyOfString>
</ArrayOfEntityPropertyOfString>'
insert into @T values (@xml)
insert into @T values (@xml)
select T1.ID,
T2.N.value('local-name(.)', 'nvarchar(max)') as NodeName,
T2.N.value('text()[1]', 'nvarchar(max)') as NodeValue
from @T as T1
cross apply T1.XMLCol.nodes('//*') as T2(N)
where T2.N.value('text()[1]', 'nvarchar(max)') like '%bonus%'
实际上,会有奖金标签。我正在尝试从值节点获取所有奖金值,并将其插入奖金节点。别名
T(N)
和T.N
在我的安装中无法识别。这似乎可以工作,但仅适用于一条记录。我想查询整个表。有没有比遍历每条记录更简单的方法?@Eric-当然,你可以使用交叉应用。我已经更新了我的答案。@BZN\u DBer您可以在这里尝试:
NodeName NodeValue
-------------------- --------------------
Value BONUS $350/DAY
declare @T table (ID int identity primary key, XMLCol xml)
declare @xml xml =
'<ArrayOfEntityPropertyOfString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<EntityPropertyOfString>
<Name>User Label 1</Name>
<Value>TX 12107210</Value>
</EntityPropertyOfString>
<EntityPropertyOfString>
<Name>User Label 2</Name>
<Value>BONUS $350/DAY</Value>
</EntityPropertyOfString>
<EntityPropertyOfString>
<Name>User Defined Date 9</Name>
<Value>11/09/2011</Value>
</EntityPropertyOfString>
</ArrayOfEntityPropertyOfString>'
insert into @T values (@xml)
insert into @T values (@xml)
select T1.ID,
T2.N.value('local-name(.)', 'nvarchar(max)') as NodeName,
T2.N.value('text()[1]', 'nvarchar(max)') as NodeValue
from @T as T1
cross apply T1.XMLCol.nodes('//*') as T2(N)
where T2.N.value('text()[1]', 'nvarchar(max)') like '%bonus%'
ID NodeName NodeValue
----------- -------------------- --------------------
1 Value BONUS $350/DAY
2 Value BONUS $350/DAY