SSIS表达式选择变量作为列,然后抛出错误

时间:2019-05-10 07:51:18

标签: sql sql-server ssis expression etl

我有一个汇总到字符串中的工作人员列表。 我想将此字符串的输出输入到SSIS表达式中,然后可以将其用作sql语句。

创建的变量为@User::USER

问题是,它将变量转换为变量名称,然后寻找该列。

SSIS表达式是:

"SELECT
    CONCAT(RTRIM(USER_GIVEN_NAME), ' ', RTRIM(USER_SURNAME)) as [User]
    ,user_num
FROM [dbo].[USER_B]
where CONCAT(RTRIM(USER_GIVEN_NAME), ' ', RTRIM(USER_SURNAME)) in (" +  @[User::USERS] + ")"

将变量设置为作为表达式求值。

然后评估为:

SELECT
    CONCAT(RTRIM(USER_GIVEN_NAME), ' ', RTRIM(USER_SURNAME)) as [User]
    ,user_num
FROM [dbo].[USER_B]
where CONCAT(RTRIM(USER_GIVEN_NAME), ' ', RTRIM(USER_SURNAME)) in (USERS)

@user::USERS = 'xxx','yyy','zzz'

我确定这是语法错误或设置错误,但尚未解决。

任何帮助都会很棒。

谢谢

获取用户列表:

SELECT
    STRING_AGG(QUOTENAME(CONCAT(USER_GIVEN_NAME, ' ', USER_SURNAME),''''), ',') as USERS
FROM [Operations Stats].[dbo].[Team Members]

;

"SELECT
    CONCAT(RTRIM(USER_GIVEN_NAME), ' ', RTRIM(USER_SURNAME)) as [User]
    ,user_num
FROM [dbo].[USER_B]
where CONCAT(RTRIM(USER_GIVEN_NAME), ' ', RTRIM(USER_SURNAME)) in (" +  @[User::USERS] + ")"

我希望@user::USER评估为'xxx','yyy','zzz',而不将其视为USER列。

1 个答案:

答案 0 :(得分:1)

首先,如上面评论中的@Filburt所述,请确保未将Evaluate As Expression设置为@[User:USERS]变量。

我将建议另一种方法,创建一个字符串类型为@[User::strQuery]的变量,然后在数据流任务之前添加具有以下表达式的表达式任务:

@[User:strQuery] = "SELECT
CONCAT(RTRIM(USER_GIVEN_NAME), ' ', RTRIM(USER_SURNAME)) as [User]
,user_num
FROM [dbo].[USER_B]
where CONCAT(RTRIM(USER_GIVEN_NAME), ' ', RTRIM(USER_SURNAME)) in (" +  @[User::USERS] + ")"

然后单击“数据流任务”,并将Delay Validation属性设置为True

我认为使用Expression Task更精确,并且您将了解更改变量属性的情况。