2017-04-14 10 views
0

私はSql ServerのXML programmmingの経験はありませんが、SQLStatementSourceの内容をSSISファイル(dtsxファイル拡張子)から読み取るためにいくつかのコードを試しています。SQLを引き出す方法

このコードはオンラインで、SQLStatementSourceの先頭に3番目のコンポーネントが追加されましたが、何も返されません。私はどのように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つのヒントを許してください:この質問が解決された場合は、(最良の)回答の投票カウンタの下で受け入れ検査をチェックすることは、非常に親切です。これは、1)この問題を解決済みとマークします。2)フォロワーが最良の解決策を見つけるのをより簡単にします。3)回答者にポイントを払います。あなたが15ポイントを越えてしまったシスは、さらにあなたが寄付に投票するよう頼まれています。これは、ありがとうと言います。ハッピーコーディング! – Shnugo

答えて

0

1つが見つかりましたexample of a dtsx file hereです。

変更する必要があるのは、''の代わりに"(二重引用符ではなく実際の二重引用符)を使用することだけです。

あなたの例では、暗黙的な名前空間宣言を何度も使用していますが、これは宣言された名前空間でより簡単になります。

ここでは非常に少ない例がありますが、これを読むには十分なヒントが得られます。

重要なヒント:デフォルトの名前空間では、要素名の名前空間接頭辞は省略できますが、属性には使用できません。そのため、私は属性を持つワイルドカードを使用します。

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)') 
関連する問題