【问题标题】:SSIS Catalog environment variablesSSIS 目录环境变量
【发布时间】:2017-09-24 14:14:40
【问题描述】:

我正在尝试使用环境变量在运行时为我的连接字符串定义参数。

我尝试关注some guides online。于是我在包里定义了参数:

现在问题来了:
该指南有效,唯一的问题是每次执行一个包时,我都需要手动选择我要使用的环境文件夹,虽然我已经在包中这样做了。

SSIS 不假定知道要使用哪个环境(即使只有一个环境)

如何覆盖它?

我看到我可以使用计划的作业,并告诉它要使用哪个环境,但这对我没有帮助,因为我正在通过服务和过程运行我的包。我需要某种方式告诉它选择哪个环境。

【问题讨论】:

    标签: sql-server ssis sql-server-2012


    【解决方案1】:

    您不能永远设置一个环境 - 环境的想法是您选择要在执行期间使用的环境。正如您所指出的,您可以在工作中做到这一点。那么这是否意味着代理工作具有超自然的力量?不会。如果您使用执行引用环境的包的步骤编写作业脚本,您将看到熟悉的 dtexec 命令,例如:

        /ISSERVER "\"\SSISDB\test\test1\Incremental.dtsx\"" /SERVER "\"DESKTOP-NT4K1HQ\"" 
    /ENVREFERENCE 1 /Par "\"$ServerOption::LOGGING_LEVEL(Int16)\"";1 
    /Par "\"$ServerOption::SYNCHRONIZED(Boolean)\"";True /CALLERINFO SQLAGENT /REPORTING E
    

    我想在这里强调的是 /ENVREFERENCE 1 参数 - 这是代理作业如何知道选择哪个环境的方式。

    所以你的问题的答案是你总是需要在执行一个包时选择一个环境(当然如果你想使用一个)。如果是目录过程,您会执行类似的操作(根据 this article):

        EXEC [SSISDB].[catalog].[create_execution] @package_name=N'Child1.dtsx', @execution_id=@execution_id OUTPUT, @folder_name=N'TestDeply4', @project_name=N'Integration Services Project1', 
    @use32bitruntime=False, 
    @reference_id=1
    

    @reference_id = 1 是您的环境参考。为了找到您的环境 ID,您必须查询 [SSISDB].[catalog].[environments] 视图。

    我是否回答了您的问题,或者您是否以不同的方式执行您的包?如果您确定您永远不需要多个环境,那么这将表明您根本不需要环境变量。

    【讨论】:

    • 感谢您的回答。我将需要使用超过 1 个环境 (DEV,QA,PROD..)。我的问题是我正在执行这样的包 - >我有一个 Web 服务,它将参数发送到数据库中的 SP,它使用 start_execution 执行包,这会引发我没有提供的错误此参数的值。我的意图是将环境变量用于连接字符串,以便在必要时可以轻松地对其进行硬编码和更改。我是否需要更改它以依赖数据库中的表?
    • 环境变量是实现所需的好方法,但您仍然必须能够在创建执行时确定上下文(您必须在调用 start_execution 之前执行此操作)。我想说的是,您可以通过 Web 服务中的参数将环境 ID 传递给存储过程,也可以创建一个配置表来存储 ID 或环境名称。
    • 另一个想法:通过分配与您的数据库/服务器名称匹配的名称来建立您需要的环境(取决于您如何分隔环境)。然后通过查询 [SSISDB].[catalog].[environments] 视图,您可以使用 db/server 名称提取环境 ID。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多