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专栏。
首先,正如 @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 更精确,并且您会意识到更改变量属性。