Выражение SSIS выбирает переменную как столбец, а затем выдает ошибку - PullRequest
5 голосов
/ 10 мая 2019

У меня есть список сотрудников, которые я собираю в строку.Я хочу передать вывод этой строки в выражение 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 Ответ

1 голос
/ 11 мая 2019

Прежде всего, как @Filburt упоминал в комментарии выше, убедитесь, что вы не установили Evaluate As Expression в @[User:USERS] переменную.

Я предложу другой способ сделать это, Создатьпеременная типа string @[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 более точно, и вы будете знать об изменении свойств переменных.

...