Sql 动态更改SSIS中的服务器名称

Sql 动态更改SSIS中的服务器名称,sql,deployment,ssis,Sql,Deployment,Ssis,我有几个SSIS包在开发周期(开发、QA、登台和生产)中移动的环境,因此我希望使用SSIS中的配置在连接管理器中设置服务器名称,这样我就不需要手动执行此操作 我读过关于使用xml配置文件、SQL配置表和环境变量的内容。然而,我的问题是,我的QA和登台环境位于同一台服务器上,但使用两个单独的SQL实例。如何在此实例中动态配置服务器名称?您仍然可以使用一个配置文件进行QA和登台。在文件中包括两个服务器 然后,当您构建执行包的QA流程时,包括一个可选的运行时参数,该参数采用您希望在其中执行包的特定环境

我有几个SSIS包在开发周期(开发、QA、登台和生产)中移动的环境,因此我希望使用SSIS中的配置在连接管理器中设置服务器名称,这样我就不需要手动执行此操作


我读过关于使用xml配置文件、SQL配置表和环境变量的内容。然而,我的问题是,我的QA和登台环境位于同一台服务器上,但使用两个单独的SQL实例。如何在此实例中动态配置服务器名称?

您仍然可以使用一个配置文件进行QA和登台。在文件中包括两个服务器

然后,当您构建执行包的QA流程时,包括一个可选的运行时参数,该参数采用您希望在其中执行包的特定环境,并在包的开头使用一个小脚本任务来设置适当的变量(甚至只是动态变量)


它并不完美,但至少应该允许您在不同的环境中执行,而不必更改包本身。

我解决这个问题的方法是,设计时值始终指向开发环境。任何开发人员打开软件包,它都会针对该环境进行验证,一切都很好

在dev之外运行包意味着它们是通过SQL代理运行的。如果您能够精确控制该级别,那么创建作业以指向正确的配置存储库就很简单了

在实际实现中,我使用了一个定制的ssis目录/环境(SYSDB),它保存了我们的配置、日志框架和标准日志表(sysdtslog90/sysssislog)。每个包都需要有一个变量
User::Default\u ConfigurationServer
,该变量用作Configuration Connection Manager的ConnectionString属性上的表达式。听起来很复杂,但事实并非如此---

  • 创建字符串类型的变量
  • 复制配置的值 连接管理器的连接字符串,并将其粘贴为值
  • 将表达式分配回配置连接管理器的 ConnectionString属性
  • dev中的净效果是它什么都不做,但现在您可以让它在其他环境中工作。我的经纪人看起来都像

    DECLARE @serverName sysname
    ,    @jobstep_command nvarchar(4000)
    -- Lots of other stuff removed
    SET @serverName = @@servername
    
    SET @jobstep_command = N'/SQL "\MyPackage"' + '" /SERVER "' + @serverName + '" /CHECKPOINTING OFF /REPORTING E /SET "\Package.Variables[User::Default_ConfigurationServer].Properties[Value]";"\"Provider=SQLNCLI10;Data Source=' + @serverName + ';Initial Catalog=SYSDB;Integrated Security=SSPI;\""'
    
    -- create the job, also removed
    -- Create the job step
    EXECUTE @return_code = msdb.dbo.sp_add_job 
        @job_name = @job_name
    ,   @enabled = @job_enabled
    ,   @description = @job_description
    ,   @start_step_id = @job_start_step
    ,   @category_name = @category_name
    --, @category_id = @category
    ,   @owner_login_name = @job_owner_login_name
    ,   @notify_level_eventlog = @job_notify_level_eventlog
    ,   @notify_level_email = @job_notify_level_email
    ,   @notify_level_netsend = @job_notify_level_netsend
    ,   @notify_level_page = @job_notify_level_page
    ,   @notify_email_operator_name = @job_notify_email_operator_name
    ,   @notify_netsend_operator_name = @job_notify_netsend_operator_name
    ,   @notify_page_operator_name = @job_notify_page_operator_name
    ,   @delete_level = @job_delete_level
    ,   @job_id = @job_id OUTPUT
    

    现在,不管我的作业是在哪里创建的,它都会将该变量指向正确的位置,这反过来会导致包找到正确的存储库,而我要做的工作就更少了。

    好的,这就是我们的处理方式。我们使用一个环境变量来确定要从中读取其余配置的数据库。环境变量与用户关联,因此我们为一个用户设置QA作业,为另一个用户设置登台作业。我们的用户被称为SQLQA和SQLstaging,它们只用于运行作业。然后,环境变量指向我们在SSIS config中存储其余配置的数据库