2017-05-12 47 views
0

SSIS 2014パッケージ(Project Deployment)を作成しました。ここで.dtsx(SSIS)で使用されているXMLをクエリする方法

あなたはそれのXMLコンテンツの(関連する)部分を参照してください。

<DTS:Executable DTS:refId="Package\Drop and Create statements voor tabellen\Drop and Create Classes_staging" DTS:CreationName="Microsoft.ExecuteSQLTask" DTS:Description="Execute SQL Task" DTS:DTSID="{60C174A8-D9C0-4F2A-B783-77753552BFCB}" DTS:ExecutableType="Microsoft.ExecuteSQLTask" DTS:LocaleID="-1" DTS:ObjectName="Drop and Create Classes_staging" DTS:TaskContact="Execute SQL Task; Microsoft Corporation; SQL Server 2014; © 2014 Microsoft Corporation; All Rights Reserved;http://www.microsoft.com/sql/support/default.asp;1" DTS:ThreadHint="7"> 
     <DTS:Variables /> 
     <DTS:ObjectData> 
     <SQLTask:SqlTaskData xmlns:SQLTask="www.microsoft.com/sqlserver/dts/tasks/sqltask" SQLTask:Connection="{c25e8858-9d6b-424d-b231-3ae05aed0d4b}" SQLTask:SqlStatementSource="/****** Table [dbo].[Classes_staging] ******/&#xA;IF OBJECT_ID('[dbo].[Classes_staging]') IS NOT NULL&#xA;DROP TABLE [dbo].[Classes_staging];&#xA;GO&#xA;&#xA;CREATE TABLE [dbo].[Classes_staging](&#xA;&#x9;[Reference] [nvarchar](50) NULL) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]&#xA;&#xA;GO&#xA;&#xA;&#xA;" /> 
     </DTS:ObjectData> 
    </DTS:Executable> 

このファイルは、OPENROWSETを使用して、テーブルにインポートされます。

INSERT INTO Packages(XMLContent) 
SELECT CONVERT(XML, BulkColumn) AS xContent 
FROM OPENROWSET(BULK 'myFile.dtsx', SINGLE_BLOB) AS x; 

今、私はそれを照会しようとしています:

;WITH XMLNAMESPACES ('www.microsoft.com/SqlServer/Dts' AS 
DTS,'www.microsoft.com/sqlserver/dts/tasks/sqltask' AS SQLTask) 

--Alle Executables 
SELECT  Pkg.props.value('./@DTS:DTSID','nvarchar(max)') as [DTSID] 
      ,Pkg.props.value('./@DTS:refId','nvarchar(max)') as [Executable] 
      ,Pkg.props.value('./@DTS:ObjectName','nvarchar(max)') as [ObjectName] 
      ,Pkg.props.value('./@DTS:Description','nvarchar(max)') as [Description] 
      ,Pkg.props.value('./@DTS:ExecutableType','nvarchar(max)') as [ExecutableType] 
      ,Pkg.props.value('./@SQLTask:SqlStatementSource','nvarchar(max)') as [SqlStatementSource] 
FROM (SELECT XMLContent AS pkgXML FROM packages) t 

--CROSS APPLY pkgXML.nodes('//SQLTask:SqlTaskData') Pkg(props) 
CROSS APPLY pkgXML.nodes('//DTS:Executable') Pkg(props) 

私は、パッケージで使用されるすべてのSQLStatementsを見つけることができますいずれかOR実行ファイルに関する詳細を見つけることができます。私は上記の2つを交換することでこれを行うことができます。CROSS APPLY しかし、私は両方を行うことはできません...私はここで何が欠けていますか?

答えて

1
;WITH XMLNAMESPACES ('www.microsoft.com/SqlServer/Dts' AS 
DTS,'www.microsoft.com/sqlserver/dts/tasks/sqltask' AS SQLTask) 

--Alle Executables 
SELECT  X.Exe.value('./@DTS:DTSID','nvarchar(max)') as [DTSID] 
      ,X.Exe.value('./@DTS:refId','nvarchar(max)') as [Executable] 
      ,X.Exe.value('./@DTS:ObjectName','nvarchar(max)') as [ObjectName] 
      ,X.Exe.value('./@DTS:Description','nvarchar(max)') as [Description] 
      ,X.Exe.value('./@DTS:ExecutableType','nvarchar(max)') as [ExecutableType] 
      ,Y.Task.value('./@SQLTask:SqlStatementSource','nvarchar(max)') as [SqlStatementSource] 

FROM (SELECT XMLContent AS pkgXML FROM packages) t 

CROSS APPLY pkgXML.nodes('//DTS:Executable') X(Exe) 
OUTER APPLY X.Exe.nodes('./DTS:ObjectData/SQLTask:SqlTaskData') Y(Task) 
1

は最初CROSS APPLYの結果に、SqlTaskData上でXMLをシュレッド別CROSS APPLYを行います

;WITH XMLNAMESPACES ('www.microsoft.com/SqlServer/Dts' AS 
DTS,'www.microsoft.com/sqlserver/dts/tasks/sqltask' AS SQLTask) 

--Alle Executables 
SELECT  Y.Task.value('./@DTS:DTSID','nvarchar(max)') as [DTSID] 
      ,Y.Task.value('./@DTS:refId','nvarchar(max)') as [Executable] 
      ,Y.Task.value('./@DTS:ObjectName','nvarchar(max)') as [ObjectName] 
      ,Y.Task.value('./@DTS:Description','nvarchar(max)') as [Description] 
      ,Y.Task.value('./@DTS:ExecutableType','nvarchar(max)') as [ExecutableType] 
      ,X.Exe.value('./@SQLTask:SqlStatementSource','nvarchar(max)') as [SqlStatementSource] 
FROM (SELECT XMLContent AS pkgXML FROM packages) t 

CROSS APPLY pkgXML.nodes('//DTS:Executable') X(Exe) 
CROSS APPLY X.Exe.nodes('./DTS:ObjectData/SQLTask:SqlTaskData') Y(Task) 
+0

は、SELECT文でY.Taskとのx.exeを切り替え、OUTERをしなければなりませんでした2番目のAPPLYのAPPLYがトリックでした!正しい方向に私を指してくれてありがとう。 – Henrov

関連する問題