1

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

我可以找到有关如何设置它的大量参考资料,并且确实希望转到 Connection manager>Properties>Expressions 会告诉我,但事实并非如此。我确实设法通过转到包配置管理器找到它,选择合理命名的参数,编辑它们,转到向导的第二个对话框以找到导出的属性名称。这不可能是唯一的方法,当然?

问候,斯图尔特

编辑 - 这是在 Visual Studio 2008 中

4

3 回答 3

2

首先,获取BIDSHelper,它是 Visual Studio 的免费插件,至少它有助于识别元素何时应用了表达式和配置。一个会有青色高光,另一个是紫红色,是的,一个物体可以同时拥有。

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

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

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

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

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

于 2012-10-18T11:59:39.413 回答
1

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

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

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

FROM [Database].[dbo].[Configurations_table] where ConfiguredValue like '%object in which you areinterested%'

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

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

问候,斯图尔特

于 2012-10-23T10:11:09.587 回答
0

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

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

    '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
于 2012-10-18T20:05:34.883 回答