【问题标题】:Tracking parameter mappings in SSIS在 SSIS 中跟踪参数映射
【发布时间】:2012-10-23 18:11:09
【问题描述】:

在一个 SSIS 项目中,我知道如何设置一个变量来保存连接管理器的连接字符串 - 但我该怎么做呢?即 - 我有一个现有的 SSIS 包,并想找出为特定连接管理器提供连接字符串的变量的名称。

我可以找到有关如何设置它的大量参考资料,并且确实希望转到连接管理器>属性>表达式会显示给我,但事实并非如此。我确实设法通过转到包配置管理器找到它,选择合理命名的参数,编辑它们,转到向导的第二个对话框以找到导出的属性名称。这肯定不是唯一的方法吗?

问候,斯图尔特

编辑 - 这是在 Visual Studio 2008 中

【问题讨论】:

    标签: ssis


    【解决方案1】:

    首先,抓住BIDSHelper,它是Visual Studio 的免费插件,它至少有助于识别元素何时应用了表达式和配置。一个会有青色高光,另一个是紫红色,是的,一个对象可以同时具有这两者。

    您描述的第一个场景,查看属性、表达式并确定表达式的使用。其他对象,您可能需要查看“表达式”选项卡。

    配置的工作方式不同。您可以使用环境变量、注册表值、父包值、XML 文件或 SQL Server 表。前三个提供配置值和配置项(变量、连接管理器等)之间的 1:1 映射。 XML 和 SQL Server 可以配置很多项。应用的订单配置很重要,因为您可以有 5 个配置条目,并且每个配置条目都使用不同的值修改相同的设置。 2005 和 2008 应用配置的方式也有所不同,请查看Understanding How Integration Services Applies Configurations

    加载包时,BIDS 将指示它尝试加载的配置(查看您的输出窗口)。除了 BIDS 突出显示和那些消息之外,这些消息是您存在和正在应用配置的其他线索。这也是您检测丢失配置的机会(我希望找到配置 X 但没有找到它 = 配置资源不存在)或(我希望配置属性 X 但找不到它 = 正在配置的东西不存在存在)

    我发现最好的方法是定义一个环境中的所有应用程序都使用的一组通用配置(销售连接、仓库连接),并使用一致的配置命名方法。然后,我们为项目级别的事物使用自定义配置(InsuranceProcessing 包的输入和输出路径将适用于所有包,但对于销售将不同),然后是第三组特定于包的配置。我们为此使用 SQL Server 表,因为它使检查值比通过大量丑陋的 XML 更容易。

    大量信息,但没有任何信息可以直接回答您的问题。对于那个很抱歉。您也许可以检查对象模型并查看已配置的内容,但这很难看。

    【讨论】:

    • Cheers Billinkc - BIDSHelper 现已安装,将来会派上用场,但正如你所说,它并没有真正给我答案。
    【解决方案2】:

    感谢上面的答案,我意识到它不是一个变量,而是一个配置。一旦这一点变得清晰,更多的谷歌搜索导致了一个解释为什么目标对象在包配置管理器中是空白的(可能有多个)。

    答案在配置数据库中; PackagePath 条目包含 \Package.Connections[connection manager name].Properties[ConnectionString],因此要找出特定映射的来源,请使用类似的内容。

        SELECT TOP 1000 [ConfigurationFilter]
      ,[ConfiguredValue]
      ,[PackagePath]
      ,[ConfiguredValueType]
    

    FROM [数据库].[dbo].[Configurations_table] 其中 ConfiguredValue like '%object which you areinterested%'

    (不知道为什么所有这些都没有进入代码块)。

    我仍然认为它应该更容易,但我希望这对其他人有所帮助。

    问候,斯图尔特

    【讨论】:

      【解决方案3】:

      blinkc 的好答案。除了那个答案(或者更确切地说是充实“检查对象模型并查看配置的内容”部分),我在任何包的开头运行一个脚本,将所有连接管理器连接字符串的值添加到输出窗口,后跟每个管理器的连接字符串表达式。此外,它循环遍历脚本中指定使用的所有变量并输出值。在生产中不太有用,但在开发/测试时非常有用。

      只需将脚本任务添加到包流的开头,指定要调试的任何变量,然后将以下代码添加到脚本中:

          'Report number of connections
          Dts.Events.FireInformation(99, "debug", "number of connections = " & Dts.Connections.Count, "", 0, True)
      
          'Loop through connection collection
          For Each cConnection As Microsoft.SqlServer.Dts.Runtime.ConnectionManager In Dts.Connections
      
              'Report connection string value
              Try
                  Dts.Events.FireInformation(99, "debug", "connection """ & cConnection.Name & """ value = " & cConnection.ConnectionString, "", 0, True)
              Catch
              End Try
      
              'Report connection string expression
              Try
                  Dts.Events.FireInformation(99, "debug", "connection """ & cConnection.Name & """ constring  expression = " & cConnection.GetExpression("ConnectionString"), "", 0, True)
              Catch
              End Try
      
          Next
      
          'Report number of variables
          Dts.Events.FireInformation(99, "debug", "Number of Variables = " & Dts.Variables.Count, "", 0, True)
      
          'Loop through variables collection
          For Each vVariable As Microsoft.SqlServer.Dts.Runtime.Variable In Dts.Variables
      
              'Report variable value
              Try
                  Dts.Events.FireInformation(99, "debug", "Variable """ & vVariable.Name & """ value = " & vVariable.Value, "", 0, True)
              Catch
              End Try
      
          Next
      

      【讨论】:

      • 非常感谢 Aphillipe - 这非常有用,因为它没有为我提供我正在寻找的信息,但为我提供了如何以不同方式看待事物的足够线索。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-04
      相关资源
      最近更新 更多