2017-04-14 3 views
0

SQL Server에서 XML programmming에 대한 경험이 없지만 일부 코드를 사용하여 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입니다.

변경해야 할 것은 '' (이중 작은 따옴표 대신 실제 큰 따옴표) 대신 "을 사용하는 것일 수도 있습니다.

예제에서 암시 적 네임 스페이스 선언을 반복하여 사용하고 있는데이 경우 선언 된 네임 스페이스를 사용하면 더 쉬워집니다.

다음은 매우 축소 된 예제입니다. 그러나 이것을 읽는 방법에 대한 충분한 힌트를 얻을 수 있습니다.

중요 힌트 : 기본 네임 스페이스를 사용하면 요소 이름에는 네임 스페이스 접두사를 사용할 수 있지만 특성에는 네임 스페이스 접두사를 사용할 수 없습니다. 그래서 와일드 카드를 속성과 함께 사용합니다.

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)')