2017-09-24 50 views
0

我试图使用环境变量定义在运行时我的连接字符串参数。SSIS目录的环境变量

我试图按照some guides online。所以我定义在包中的参数:

enter image description here

现在的问题:
的指导工作,唯一的问题是,每次执行包的时候,我需要手动选择我想要的环境文件夹尽管我已经在包装中使用过了。

enter image description here

SSIS并不认为自己知道要使用的环境(即使只存在)

我如何重写呢?

我看到了,我可以使用计划的工作,并告诉它使用的环境,但因为我是通过服务和程序运行我的包,这不是有帮助我。我需要一些方式告诉它选择哪种环境。

回答

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', @[email protected]_id OUTPUT, @folder_name=N'TestDeply4', @project_name=N'Integration Services Project1', 
@use32bitruntime=False, 
@reference_id=1 

哪里@reference_id = 1是你的环境引用。为了查找您的环境ID,您必须查询[SSISDB].[catalog].[environments]视图。

我有没有回答你的问题还是你以不同的方式执行你的包?如果你确定你永远不会需要多于一个的环境,那么这将表明你根本不需要环境变量。

+0

感谢您的回答。我将需要使用多于1个环境(DEV,QA,PROD ..)。我的问题是我正在像这样执行包 - >我有一个Web服务,它将参数发送到DB中的SP,它使用'start_execution'执行包,该包引发了一个我没有提供的错误值给这个参数。我的意图是使用连接字符串的环境变量,所以它可以很容易地被硬编码,并在必要时进行更改。我是否需要更改它可能取决于数据库中的表格? – sagi

+0

环境变量是实现您需要的一种好方法,但您仍然必须能够在创建执行时确定上下文(您必须在调用start_execution之前执行此操作)。我想说,你可以通过一个参数从Web服务传递一个环境ID到存储过程,或者创建一个配置表,在其中存储ID或环境名称。 – PacoDePaco

+0

另一个想法:通过给他们分配与您的数据库/服务器名称相匹配的名称来建立您所需要的环境(取决于您如何分离您的环境)。然后通过查询[SSISDB]。[catalog]。[environments]视图,您可以使用db/server名称来提取环境ID。 – PacoDePaco