我正在尝试使用几年前在此处发布的相同代码,它适用于较旧的 DTS,但自 2008 年以来的新模型无法识别对象中的名称。我想知道我的代码在哪里不好,我想在 DTS (XML) 结构上解析名称是错误的,但我不知道如何修复它。所有 ObjectName 列都显示为 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("M", -1, GETDATE()),6,2) == "01" ? "JAN" : 
SUBSTRING((DT_WSTR,200)DATEADD("M", -1, GETDATE()),6,2) == "02" ? "FEV" : 
SUBSTRING((DT_WSTR,200)DATEADD("M", -1, GETDATE()),6,2) == "03" ? "MAR" : 
SUBSTRING((DT_WSTR,200)DATEADD("M", -1, GETDATE()),6,2) == "04" ? "ABR" : 
SUBSTRING((DT_WSTR,200)DATEADD("M", -1, GETDATE()),6,2) == "05" ? "MAI" : 
SUBSTRING((DT_WSTR,200)DATEADD("M", -1, GETDATE()),6,2) == "06" ? "JUN" : 
SUBSTRING((DT_WSTR,200)DATEADD("M", -1, GETDATE()),6,2) == "07" ? "JUL" : 
SUBSTRING((DT_WSTR,200)DATEADD("M", -1, GETDATE()),6,2) == "08" ? "AGO" : 
SUBSTRING((DT_WSTR,200)DATEADD("M", -1, GETDATE()),6,2) == "09" ? "SET" : 
SUBSTRING((DT_WSTR,200)DATEADD("M", -1, GETDATE()),6,2) == "10" ? "OUT" : 
SUBSTRING((DT_WSTR,200)DATEADD("M", -1, GETDATE()),6,2) == "11" ? "NOV" : 
SUBSTRING((DT_WSTR,200)DATEADD("M", -1, GETDATE()),6,2) == "12" ? "DEZ":"") 
+ RIGHT( (DT_WSTR, 4) YEAR(DATEADD("M", -1, GETDATE())) , 2)" DTS:IncludeInDebugDump="2345" DTS:Namespace="User" DTS:ObjectName="ANOMES_DIXXXXX">
<DTS:VariableValue DTS:DataType="8">JUN21</DTS:VariableValue>