跟踪SSIS中的参数映射

时间:2012-10-18 07:34:33

标签: ssis

在SSIS项目中,我知道如何设置一个变量来保存Connection Manager的连接字符串 - 但是我该怎样走另一条路? ie - 我有一个现有的SSIS包,想要找出为特定Connection Manager提供连接字符串的变量名称。

我可以找到大量有关如何设置它的参考资料,并且确实希望转到Connection manager> Properties> Expressions会向我展示,但事实并非如此。我确实设法通过转到Package Configuration Organizer,选择合理命名的参数,编辑它们,转到向导的第二个对话框来查找Exported属性名称。这肯定不是唯一的方法吗?

问候,斯图尔特

编辑 - 这是在Visual Studio 2008中

3 个答案:

答案 0 :(得分:2)

首先,抓住BIDSHelper它是visual studio的免费加载项,它至少有助于识别元素何时应用了表达式和配置。一个将有一个蓝绿色突出显示,另一个将有fuschia颜色,是的,一个对象可以有两个。

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

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

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

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

很多信息,但没有直接回答你问题的信息。对于那个很抱歉。您可能能够检查对象模型并查看已配置的内容,但这很难看。

答案 1 :(得分:1)

由于上述答案,我意识到它不是变量,而是配置。一旦变得清晰,Googling就会在包配置管理器中解释为什么目标对象是空白的(可能有多个)。

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

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

FROM [数据库]。[dbo]。[Configurations_table]   其中ConfiguredValue类似于'%您感兴趣的对象%'

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

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

问候,斯图尔特

答案 2 :(得分:0)

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

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

    '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