也许有人能帮我,我有一个带nRows和XML列的sql表。XML结构如下:
<DynamicResults>
<RegQuery xmlns:xsi="http://www.w3.o....." xmlns:xsd="http://....." REGServer="localhost" REGHive="HKEY_LOCAL_MACHINE" REGSubKey="SOFTWAREMicrosoftWindowsBlaBla" />
</DynamicResults>
我的问题是:我如何查询xml,我想知道在属性"REGSubKey"中具有指定值的/DynamicResults/RegQuery是否有子节点。。。
非常感谢
我通常这样做的方式是使用内置的XML函数(如果您使用的是SQL Server 2005或更高版本)。
查看此MSDN页面:http://msdn.microsoft.com/en-us/library/ms178030
这里是一个返回特定reg密钥SOFTWAREMicrosoftWindowsBlaBla
的子节点数量的示例。。。
DECLARE @x xml
SET @x='<DynamicResults>
<RegQuery xmlns:xsi="http://www.w3.o....." xmlns:xsd="http://....." REGServer="localhost" REGHive="HKEY_LOCAL_MACHINE" REGSubKey="SOFTWAREMicrosoftWindowsBlaBla">
<SubNode />
<SubNode />
</RegQuery>
<RegQuery xmlns:xsi="http://www.w3.o....." xmlns:xsd="http://....." REGServer="localhost" REGHive="HKEY_LOCAL_MACHINE" REGSubKey="SOFTWAREMicrosoftWindowsBlaBla2" />
<RegQuery xmlns:xsi="http://www.w3.o....." xmlns:xsd="http://....." REGServer="localhost" REGHive="HKEY_LOCAL_MACHINE" REGSubKey="SOFTWAREMicrosoftWindowsBlaBla3" />
</DynamicResults>'
SELECT @x.value('count(/DynamicResults/RegQuery[@REGSubKey="SOFTWAREMicrosoftWindowsBlaBla"]/*)','INT')
GO
select *
from table
where XmlField.value('count(/DynamicResults/RegQuery[@REGSubKey="SOFTWAREMicrosoftWindowsBlaBla"]/*)','int')>0