2012-08-29 204 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