如果我硬编码@ param_name,@ param_value的值,则脚本可以工作。但是,如果我使用以下脚本,则会出现“找不到参数,因为它不存在”错误。我尝试了许多变体而没有成功。参数已正确填充并具有正确的数据类型。
declare @param_name as nvarchar(128), @param_value sql_variant
declare set_environment_params cursor for
select cast(name as nvarchar(128)) as name, value from internal.environment_variables
where environment_id=00
open set_environment_params
fetch next from set_environment_params
into @param_name, @param_value
while @@FETCH_STATUS=0
begin
EXEC [SSISDB].[catalog].[set_object_parameter_value] @object_type=20,
@parameter_name=@param_name,
@object_name=N'Test',
@folder_name=N'DevOps',
@project_name=N'Test',
@value_type=R,
@parameter_value=@param_value
fetch next from set_environment_params
into @param_name, @param_value
end
deallocate set_environment_params;
close set_environment_params;
GO
答案 0 :(得分:1)
set_object_parameter_value
已超载。如果要设置值,请在@parameter_value
中指定值。如果要设置对环境变量的引用,则@parameter_value
是要引用的变量的名称。
之后对我有用
我将项目参数定义为
在SSIS目录中,我创建了一个名为SOEnvironment
的环境,并在其中填充了3个这样的变量
DECLARE @var datetime = N'2018-01-02';
EXEC SSISDB.catalog.create_environment_variable
@variable_name = N'aDateTime'
, @sensitive = False
, @description = N''
, @environment_name = N'SOEnvironment'
, @folder_name = N'So'
, @value = @var
, @data_type = N'DateTime';
GO
DECLARE @var int = N'0';
EXEC SSISDB.catalog.create_environment_variable
@variable_name = N'anInt'
, @sensitive = False
, @description = N''
, @environment_name = N'SOEnvironment'
, @folder_name = N'So'
, @value = @var
, @data_type = N'Int32';
GO
DECLARE @var sql_variant = N'A';
EXEC SSISDB.catalog.create_environment_variable
@variable_name = N'aWideString'
, @sensitive = False
, @description = N''
, @environment_name = N'SOEnvironment'
, @folder_name = N'So'
, @value = @var
, @data_type = N'String';
GO
在转换了最后两个语句(关闭,然后释放游标)之后,我单击了该项目的“配置”,并确认我具有与环境值相关的值
在我看来,这很奇怪,因此我单击查看SSMS是如何做到的。我们提供3个选项:编辑值,使用默认值,使用引用
当您明确提供一个值时,它显示为粗体(aDateTime) 使用环境参考时,它显示为带下划线的(aWideString) 默认值保留为普通字体(anInt)
所以,我然后查看了生成的SQL,最后一个参数应该是
@parameter_value = @param_name
以获取环境参考。