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

noo*_*Man 5 sql sql-server expression ssis 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] + ")"
Run Code Online (Sandbox Code Playgroud)

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

然后评估为:

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'
Run Code Online (Sandbox Code Playgroud)

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

任何帮助都会很棒。

谢谢

获取用户列表:

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] + ")"
Run Code Online (Sandbox Code Playgroud)

我想对@user::USER进行评估'xxx','yyy','zzz',而不将其视为USER专栏。

Had*_*adi 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] + ")"
Run Code Online (Sandbox Code Playgroud)

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

我认为使用 Expression Task 更精确,并且您会意识到更改变量属性。