2017-04-14 32 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)')