ssisdb:set_object_parameter_value,找不到参数,因为它不存在

时间:2018-11-29 13:56:39

标签: sql ssis

如果我硬编码@ 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

1 个答案:

答案 0 :(得分:1)

TL; DR;

set_object_parameter_value已超载。如果要设置值,请在@parameter_value中指定值。如果要设置对环境变量的引用,则@parameter_value是要引用的变量的名称。

详细信息

之后对我有用

我将项目参数定义为

project parameters

在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

在转换了最后两个语句(关闭,然后释放游标)之后,我单击了该项目的“配置”,并确认我具有与环境值相关的值

enter image description here

在我看来,这很奇怪,因此我单击查看SSMS是如何做到的。我们提供3个选项:编辑值,使用默认值,使用引用

enter image description here

当您明确提供一个值时,它显示为粗体(aDateTime) 使用环境参考时,它显示为带下划线的(aWideString) 默认值保留为普通字体(anInt)

enter image description here

所以,我然后查看了生成的SQL,最后一个参数应该是

@parameter_value = @param_name

以获取环境参考。