0

我正在尝试使用几年前在此处发布的相同代码,它适用于较旧的 DTS,但自 2008 年以来的新模型无法识别对象中的名称。我想知道我的代码在哪里不好,我想在 DTS (XML) 结构上解析名称是错误的,但我不知道如何修复它。所有 ObjectName 列都显示为 NULL 值,我需要带上名称。

NULL 的图像

有人可以帮助我吗?

*** 编码 ***

;
WITH XMLNAMESPACES ('www.microsoft.com/SqlServer/Dts' AS DTS, 'www.microsoft.com/sqlserver/dts/tasks/sqltask' AS SQLTASK) -- Query to Extract SQL Tasks with Name and SQL Statement 
SELECT
    PKG.PROPS.value('../../../../../DTS:EXECUTABLE[@DTS:NAME="OBJECTNAME"]
 [1]','varchar(MAX)') OBJECTNAME, 
 PKG.PROPS.value('(@SQLTask:SqlStatementSource)[1]', 'NVARCHAR(MAX)') AS SQLSTATEMENT 
FROM
    (
        select
            cast(PKGBLOB.BULKCOLUMN as XML) PKGXML 
        from
            OPENROWSET(BULK 'MY.dtsx', SINGLE_BLOB) as PKGBLOB
    )
    T CROSS APPLY PKGXML.NODES('//DTS:ObjectData//SQLTask:SqlTaskData') PKG(PROPS) 
UNION
-- Query to Extract DTS Pipline task with Name and SqlCommand 
SELECT
    PKG.PROPS.value('../../../../DTS:EXECUTABLE[@DTS:NAME="OBJECTNAME"]
 [1]','varchar(MAX)') OBJECTNAME, 
 PKG.PROPS.value('data(./properties/property[@name=''SqlCommand''])[1]', 'varchar(max)') SQLSTATEMENT 
FROM
    (
        select
            cast(PKGBLOB.BULKCOLUMN as XML) PKGXML 
        from
            OPENROWSET(BULK 'MY.dtsx', SINGLE_BLOB) as PKGBLOB
    )
    T CROSS APPLY PKGXML.NODES('//DTS:Executable//pipeline//components//component') PKG(PROPS) 
WHERE
    PKG.PROPS.value('data(./properties/property[@name=''SqlCommand''])
 [1]', 'varchar(max)') <>''

*** 我的 XML 格式 ***

<DTS:Executable xmlns:DTS="www.microsoft.com/SqlServer/Dts" DTS:refId="Package" DTS:CreationDate="8/31/2016 1:55:29 PM" DTS:CreationName="Microsoft.Package" DTS:CreatorComputerName="TQI001514" DTS:CreatorName="T" DTS:DTSID="{32F10679-635F-4073-9F5F-02E08B5734CA}" DTS:ExecutableType="Microsoft.Package" DTS:LastModifiedProductVersion="12.0.2430.0" DTS:LocaleID="1046" DTS:ObjectName="PRQE_OFCL" DTS:PackageType="5" DTS:ProtectionLevel="2" DTS:VersionBuild="308" DTS:VersionGUID="{9EE2A87F-B8ED-423F-835B-65860DE2A3A9}">
  <DTS:Property DTS:Name="PackageFormatVersion">8</DTS:Property>
  <DTS:ConnectionManagers>
    <DTS:ConnectionManager DTS:refId="Package.ConnectionManagers[TERADWU]" DTS:CreationName="OLEDB" DTS:DTSID="{B623-6AD62}" DTS:ObjectName="TU">
      <DTS:ObjectData>
        <DTS:ConnectionManager DTS:Retain="True" DTS:ConnectionString="Data Source=1xxxxxxx;User ID=ddddddddx;Provider=TDOLEDB.1;Persist Security Info=True;Authentication Mechanism=ldap;">
          <EncryptedData xmlns="http://www.w3.org/2001/04/xmlenc#" Type="http://www.w3.org/2001/04/xmlenc#Element" Salt="yg==" IV="WF2I=">
            <EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#tripledes-cbc" />
            <CipherData>
              <CipherValue>WF9b1mEAVLq0+qS6+wEF4/ndYQWVdDul8ImBap3r7p/bu9UsYPJfj1IWVGS28r02Fx1KUV6Sj222TQ=</CipherValue>
            </CipherData>
          </EncryptedData>
        </DTS:ConnectionManager>
      </DTS:ObjectData>
    </DTS:ConnectionManager>
  </DTS:ConnectionManagers>
  <DTS:Variables>
    <DTS:Variable DTS:CreationName="" DTS:DTSID="{FD223D6D-A5E0-4B56-83FE-917F8186EAB6}" DTS:IncludeInDebugDump="2345" DTS:Namespace="User" DTS:ObjectName="ANOMES">
      <DTS:VariableValue DTS:DataType="8">YYYYMM</DTS:VariableValue>
    </DTS:Variable>
    <DTS:Variable DTS:CreationName="" DTS:DTSID="{6A14D03C-5180-4648-8D86-1C9139E0F566}" DTS:EvaluateAsExpression="True" DTS:Expression="(SUBSTRING((DT_WSTR,200)DATEADD(&quot;M&quot;, -1, GETDATE()),6,2) == &quot;01&quot; ? &quot;JAN&quot; : &#xA;SUBSTRING((DT_WSTR,200)DATEADD(&quot;M&quot;, -1, GETDATE()),6,2) == &quot;02&quot; ? &quot;FEV&quot; : &#xA;SUBSTRING((DT_WSTR,200)DATEADD(&quot;M&quot;, -1, GETDATE()),6,2) == &quot;03&quot; ? &quot;MAR&quot; : &#xA;SUBSTRING((DT_WSTR,200)DATEADD(&quot;M&quot;, -1, GETDATE()),6,2) == &quot;04&quot; ? &quot;ABR&quot; : &#xA;SUBSTRING((DT_WSTR,200)DATEADD(&quot;M&quot;, -1, GETDATE()),6,2) == &quot;05&quot; ? &quot;MAI&quot; : &#xA;SUBSTRING((DT_WSTR,200)DATEADD(&quot;M&quot;, -1, GETDATE()),6,2) == &quot;06&quot; ? &quot;JUN&quot; : &#xA;SUBSTRING((DT_WSTR,200)DATEADD(&quot;M&quot;, -1, GETDATE()),6,2) == &quot;07&quot; ? &quot;JUL&quot; : &#xA;SUBSTRING((DT_WSTR,200)DATEADD(&quot;M&quot;, -1, GETDATE()),6,2) == &quot;08&quot; ? &quot;AGO&quot; : &#xA;SUBSTRING((DT_WSTR,200)DATEADD(&quot;M&quot;, -1, GETDATE()),6,2) == &quot;09&quot; ? &quot;SET&quot; : &#xA;SUBSTRING((DT_WSTR,200)DATEADD(&quot;M&quot;, -1, GETDATE()),6,2) == &quot;10&quot; ? &quot;OUT&quot; : &#xA;SUBSTRING((DT_WSTR,200)DATEADD(&quot;M&quot;, -1, GETDATE()),6,2) == &quot;11&quot; ? &quot;NOV&quot; : &#xA;SUBSTRING((DT_WSTR,200)DATEADD(&quot;M&quot;, -1, GETDATE()),6,2) == &quot;12&quot; ? &quot;DEZ&quot;:&quot;&quot;) &#xA;+  RIGHT(  (DT_WSTR, 4) YEAR(DATEADD(&quot;M&quot;, -1, GETDATE())) , 2)" DTS:IncludeInDebugDump="2345" DTS:Namespace="User" DTS:ObjectName="ANOMES_DIXXXXX">
      <DTS:VariableValue DTS:DataType="8">JUN21</DTS:VariableValue>
4

0 回答 0