我有一个汇总到字符串中的工作人员列表。 我想将此字符串的输出输入到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
列。
答案 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更精确,并且您将了解更改变量属性的情况。