2013-05-29 69 views
0

我試圖查詢DTS中兩個「字段」的內容:Name =「ConnectionString」。 (具體地說,以「」開頭的文本可能有多個 - 在這個例子中,有兩個:SQL Server - 查詢XML節點DTS:ConnectionManager DTS:T-SQL中的名稱

我無法弄清楚如何查詢它在冒號和dts之間:dts:,I'米難倒

讚賞任何幫助。

<DTS:Executable xmlns:DTS="www.microsoft.com/SqlServer/Dts" DTS:ExecutableType="SSIS.Package.2"> 
    <DTS:Property DTS:Name="SuppressConfigurationWarnings">0</DTS:Property> 
    <DTS:ConnectionManager> 
    <DTS:Property DTS:Name="DelayValidation">0</DTS:Property> 
    <DTS:ObjectData> 
     <DTS:ConnectionManager> 
     <DTS:Property DTS:Name="Retain">0</DTS:Property> 
     <DTS:Property DTS:Name="ConnectionString">Data Source=myserver;Initial Catalog=mydbname;Provider=SQLNCLI10.1;Integrated Security=SSPI;Auto Translate=false;Application Name=blah;</DTS:Property> 
     </DTS:ConnectionManager> 
    </DTS:ObjectData> 
    </DTS:ConnectionManager> 
    <DTS:ConnectionManager> 
    <DTS:ObjectData> 
     <DTS:ConnectionManager> 
     <DTS:Property DTS:Name="Retain">0</DTS:Property> 
     <DTS:Property DTS:Name="ConnectionString">Data Source=myserver2;Initial Catalog=mydb2;Provider=SQLNCLI10;Integrated Security=SSPI;Auto Translate=false;</DTS:Property> 
     </DTS:ConnectionManager> 
    </DTS:ObjectData> 
    </DTS:ConnectionManager> 
</DTS:Executable> 

回答

1

這並不完全清楚,但我假設你想要的連接字符串自己。所以,讓我們想象一下該文件是在一個名爲XmlColumnXML類型列,它是在名爲@XmlTable的表中,那麼你可以這樣做...

;WITH XMLNAMESPACES ('www.microsoft.com/SqlServer/Dts' as dts) 
SELECT Con.Str.value('.', 'varchar(400)') 
FROM @XmlTable 
CROSS APPLY XmlColumn.nodes('//dts:Property[@dts:Name="ConnectionString"]') as Con(Str) 

請注意,我們需要處理XML namespace using the WITH statement並且在開始時分號並不是錯誤。然後我們將XPath表達式傳遞給xml類型的nodes()方法,以檢索您需要的項目。

看到它在行動here at SQL Fiddle

+0

是的,這正是我想要的,這正是它所做的 - 謝謝!我知道名字空間,但從來不會想出這個。 – mbourgon

+0

沒有probs。我也沒有信息[這裏](http://msdn.microsoft.com/en-us/library/ms188282.aspx)。應該在原始答案中也包含該鏈接。現在添加它。 – davmos