2017-04-14 60 views
0

我在SQL Server中的XML寫頻沒有經驗,但我想一些了一些代碼來讀取SQLStatementSource內容出SSIS文件(DTSX文件擴展名)的。怎麼拉SQL

我發現這個代碼在網上,並在頂部添加的第三個組成部分的SQLStatementSource,但我回來什麼。我不知道如何附加一個dtsx文件,但我假設它可以用於任何。

任何指針?

SELECT Pkg.props.value('declare namespace p1="www.microsoft.com/SqlServer/Dts"; 
           ./p1:Property[@p1:Name=''ObjectName''][1]','nvarchar(max)') as TaskName 
    ,  Pkg.props.value('declare namespace p1="www.microsoft.com/SqlServer/Dts"; 
           ./@p1:ExecutableType','nvarchar(max)') as TaskType 
    ,  Pkg.props.value('declare namespace p1="www.microsoft.com/SqlServer/Dts"; 
           ./@p1:SqlStatementSource','nvarchar(max)') as TaskSql 

    FROM (
      select cast(pkgblob.BulkColumn as XML) pkgXML 
      from openrowset(bulk 'C:\Users\DSNoS\OneDrive\Documents\LoadingProviderContracts_New.dtsx',single_blob) as pkgblob 
      ) t 
    CROSS APPLY pkgXML.nodes('declare namespace DTS="www.microsoft.com/SqlServer/Dts"; 
           //DTS:Executable[@DTS:ExecutableType!=''STOCK:SEQUENCE'' 
          and @DTS:ExecutableType!=''STOCK:FORLOOP'' 
          and @DTS:ExecutableType!=''STOCK:FOREACHLOOP'' 
          and not(contains(@DTS:ExecutableType,''.Package.''))]' 
          ) Pkg(props) 
+0

是這個問題解決了嗎?你需要進一步的幫助嗎?請允許我提示一個提示:如果這個問題已經解決,那麼在(最佳)答案的投票櫃檯下面勾選驗收檢查將會非常友善。這將1)標記此問題已解決2)使追隨者更容易找到最佳解決方案3)支付點給答覆者和4)支付點給你。你已經超過了15點的情況與你自己相距甚遠,另外你還要求對投稿進行投票。這是SO的方式來說聲謝謝。快樂編碼! – Shnugo

回答

0

我找到了一個example of a dtsx file here

可能是,你唯一需要改變的是使用"而不是''(真正的雙引號而不是雙引號)。

在您的例子您反覆使用隱式命名空間聲明,這應該是一個聲明DEFAULT命名空間更容易。

在下面有一個非常簡化的例子,但你會得到足夠的提示,如何閱讀這個。

重要提示:使用默認命名空間,可以省略元素名稱的命名空間前綴,但不能爲屬性命名。這就是爲什麼我使用帶有屬性的通配符。

DECLARE @dtsx XML= 
N'<?xml version="1.0"?> 
<DTS:Executable xmlns:DTS="www.microsoft.com/SqlServer/Dts" DTS:ExecutableType="MSDTS.Package.1"> 
    <DTS:Property DTS:Name="PackageFormatVersion">2</DTS:Property> 
    <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="ConnectionString">Data Source=VSSQLDB02;Initial Catalog=MSSQLTipsSSISTutorial;Provider=SQLNCLI;Integrated Security=SSPI;Auto Translate=false;</DTS:Property> 
     </DTS:ConnectionManager> 
    </DTS:ObjectData> 
    </DTS:ConnectionManager> 
</DTS:Executable>'; 

WITH XMLNAMESPACES(DEFAULT 'www.microsoft.com/SqlServer/Dts') 
SELECT @dtsx.value(N'(//Property/@*:Name)[1]',N'nvarchar(max)') AS FirstPropertyAnyWhere 
     ,@dtsx.value(N'(/Executable/Property[@*:Name="SuppressConfigurationWarnings"]/text())[1]',N'int') PropertyWithACertainName 
     ,@dtsx.value(N'(/Executable/ConnectionManager/ObjectData/ConnectionManager/Property[@*:Name="ConnectionString"]/text())[1]',N'nvarchar(max)')