0

我正在尝试查询 DTS:Name="ConnectionString" 中两个“字段”的内容。(具体来说,以“”开头的文本。可以有多个 - 在本例中,有 2 个。

我不知道如何查询它。在冒号和 dts 之间:dts:,我很难过

任何帮助表示赞赏。

<DTS:Executable xmlns:DTS="www.microsoft.com/SqlServer/Dts" DTS:ExecutableType="SSIS.Package.2">
  <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="Retain">0</DTS:Property>
        <DTS:Property DTS:Name="ConnectionString">Data Source=myserver;Initial Catalog=mydbname;Provider=SQLNCLI10.1;Integrated Security=SSPI;Auto Translate=false;Application Name=blah;</DTS:Property>
      </DTS:ConnectionManager>
    </DTS:ObjectData>
  </DTS:ConnectionManager>
  <DTS:ConnectionManager>
    <DTS:ObjectData>
      <DTS:ConnectionManager>
        <DTS:Property DTS:Name="Retain">0</DTS:Property>
        <DTS:Property DTS:Name="ConnectionString">Data Source=myserver2;Initial Catalog=mydb2;Provider=SQLNCLI10;Integrated Security=SSPI;Auto Translate=false;</DTS:Property>
      </DTS:ConnectionManager>
    </DTS:ObjectData>
  </DTS:ConnectionManager>
</DTS:Executable>
4

1 回答 1

1

这并不完全清楚,但我假设您需要连接字符串本身。因此,让我们假设文档位于名为的XML类型列中,该列XmlColumn位于名为 的表中@XmlTable,那么您可以这样做...

;WITH XMLNAMESPACES ('www.microsoft.com/SqlServer/Dts' as dts) 
SELECT Con.Str.value('.', 'varchar(400)')
FROM @XmlTable
CROSS APPLY XmlColumn.nodes('//dts:Property[@dts:Name="ConnectionString"]') as Con(Str)

注意,我们需要使用语句来处理XML 命名空间,WITH并且以分号开头的不是错误的。然后我们将一个XPath表达式传递给nodes()该类型的方法xml,以便检索您需要的项目。

在 SQL Fiddle 上查看它的实际应用。

于 2013-05-29T22:59:31.230 回答