2012-08-29 207 views
0

也许有些人可以帮助我,我有一个与XML列的nRows的SQL表。 的XML结构如下:TSQL - 查询XML

<DynamicResults> 
    <RegQuery xmlns:xsi="http://www.w3.o....." xmlns:xsd="http://....." REGServer="localhost" REGHive="HKEY_LOCAL_MACHINE" REGSubKey="SOFTWARE\Microsoft\Windows\BlaBla" /> 
</DynamicResults> 

我的问题:我如何可以查询到XML,我想知道,如果在该属性的指定值/ DynamicResults/RegQuery“REGSubKey”有子节点...

非常感谢

+0

@podiluska - 感谢您的解决方案 - 但我在这方面又遇到了一个问题。我怎样才能使用声明的值来粘贴 - 因为: '.... [@RegSubKey ='+ myDeclaredVarcharWithQuotationMarks +']/*','int'......不工作 – Cadburry

+0

您需要使用'sql :variable(yourvariablename)' – podiluska

+0

@podiluska sql:variable(“@ yourvariablename”)为我工作 - 谢谢! – Cadburry

回答

0
select * 
from table 
where XmlField.value('count(/DynamicResults/RegQuery[@REGSubKey="SOFTWARE\Microsoft\Windows\BlaBla"]/*)','int')>0 
2

的方式,我通常做,这是使用内置的XML功能(如果你使用SQL Server 2005或更高版本)。

看看这个MSDN页:http://msdn.microsoft.com/en-us/library/ms178030

这里是一个返回的具体REG关键SOFTWARE\Microsoft\Windows\BlaBla子节点的数量为例...

DECLARE @x xml 
SET @x='<DynamicResults> 
    <RegQuery xmlns:xsi="http://www.w3.o....." xmlns:xsd="http://....." REGServer="localhost" REGHive="HKEY_LOCAL_MACHINE" REGSubKey="SOFTWARE\Microsoft\Windows\BlaBla"> 
    <SubNode /> 
    <SubNode /> 
    </RegQuery> 
    <RegQuery xmlns:xsi="http://www.w3.o....." xmlns:xsd="http://....." REGServer="localhost" REGHive="HKEY_LOCAL_MACHINE" REGSubKey="SOFTWARE\Microsoft\Windows\BlaBla2" /> 
    <RegQuery xmlns:xsi="http://www.w3.o....." xmlns:xsd="http://....." REGServer="localhost" REGHive="HKEY_LOCAL_MACHINE" REGSubKey="SOFTWARE\Microsoft\Windows\BlaBla3" /> 
</DynamicResults>' 
SELECT @x.value('count(/DynamicResults/RegQuery[@REGSubKey="SOFTWARE\Microsoft\Windows\BlaBla"]/*)','INT') 
GO