【问题标题】:How to make the server name dynamic in an SSIS package如何在 SSIS 包中使服务器名称动态化
【发布时间】:2010-01-21 17:57:21
【问题描述】:

我有许多 SSIS 包都连接到同一个数据库。我不想将服务器名称硬编码到每个数据库中的 db 连接中,因为它不同于开发服务器和实时服务器。这些服务器名称可能会随着时间而改变。

我知道你可以把它放在一个配置文件中,但是所有这些 SSIS 包都存储在 SQL Server 2008 中,我想在 SQL Server 中保留所有细节。

有人有什么建议或意见吗?

我正在考虑创建一个名为 GetServerName 的包,它返回服务器名称,我可以使用它来更改每个包中的连接。但可能有更好的方法。

【问题讨论】:

    标签: ssis


    【解决方案1】:

    SSIS 中一个非常好的功能可以解决您的问题,称为包配置。许多人对如何存储动态服务器/包属性/变量值-配置文件、环境变量、sql server 或注册表项有不同的意见和/或想法。我个人喜欢将所有信息存储在 SQL Server 中,这正是您想要做的。为此,请按照本文中的步骤操作:Package Configuration Steps

    【讨论】:

      【解决方案2】:

      我们使用配置表而不是文件。您从一个环境变量开始,使用配置表指向数据库,然后从那里提取所有其他配置。

      这是一个用于填充配置表的脚本示例(您可以为开发服务器、QA 服务器、生产服务器创建单独的脚本:

      --connections
      --for MyDatabaseName
      INSERT INTO MyDatabase.dbo.SSISConfig VALUES (
      'MyConfigurationName', 'Data Source=MYSQLSERVER;Initial Catalog=MyDatabaseName;Provider=SQLNCLI10.1;Integrated Security=SSPI;Auto Translate=False;', 'Package.Connections[MyDatabaseName].Properties[ConnectionString]' , 'String' )
      
      --variables
      --FilePathImportServer
      INSERT INTO MyDatabase.dbo.SSISConfig VALUES (
      'MyConfigurationName', '\\MYSERVER\SOMECLIENT\Import\', '\Package.Variables[User::FilePathImportServer].Properties[Value]' , 'String' )
      
      --select * from SSISConfig where configurationFilter = MyConfigurationName
      

      【讨论】:

        【解决方案3】:

        我使用来自具有活动服务器名称的查询的服务器名称填充变量。然后在脚本任务中我只是更改连接字符串

        此示例适用于 Excel 文件,但与 sql 连接非常相似

            Dts.Connections("ExcelConnection").ConnectionString = 
        "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=\\" +
        
         Dts.Variables("ActiveServerName").Value.ToString + "\Summary_" + 
        
        Dts.Variables("FileDate").Value.ToString + 
        ".xls;Extended Properties=Excel 8.0;HDR=YES;"
        

        【讨论】:

        • 这很好用。我们使用 SSIS 进行专门的数据加载并传入数据库连接信息,因为每个客户安装都是唯一的。
        【解决方案4】:

        我发现配置文件是解决此问题的一种非常方便的方法。

        如果您安排包从 SQL Server 代理执行,您可以从文件路径指定要使用的配置文件,这通常会满足我的所有参数要求。

        如果要将结果保存在 SQL Server 中,可以将它们存储在表中,然后检索它们。但是现在您必须知道要针对 Dev/Test/Prod 使用哪个服务器/表,然后您又回到了最初的问题。

        我的建议:在所有服务器(Dev/Test/Prod)上的相同物理位置有一个配置文件,并让作业指向参数的适当配置文件。

        【讨论】:

          【解决方案5】:

          除了配置文件...

          您可以定义一个可以通过命令行或批处理作业或 SQL Server 代理作业设置的变量。该变量可以替换为服务器名称(通过表达式 IIRC)。

          如果您想要单个文件部署,这很有用。

          编辑:

          Example:(抱歉,SQL Server Central 需要注册)

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2017-09-30
            • 2018-04-07
            • 2017-10-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多