Динамические столбцы служб SSIS - PullRequest
0 голосов
/ 15 ноября 2018

Я создал переменные, которые заполняются из строк из другой таблицы.Он должен перебрать каждую строку, чтобы сгенерировать мой следующий оператор выбора.Однако SSIS не принимает '+ @[User::ThisField]+' в качестве переменной, которую он ожидает AS MyColName после.Я не хочу этого, потому что он вернет имя столбца, а не фактическое значение, которое он содержит.

Это мой код.

SELECT 
    ISNULL('+ (DT_I4)@[User::ThisID]+', 0) AS EEDFID, 
    '+ @[User::ThisField]+', 
    EeID
FROM 
    EeExtraDetails

Кому-нибудь повезло с этим?

1 Ответ

0 голосов
/ 15 ноября 2018

Это не сработает.Если предположить, что все типы данных @ [User :: ThisField] одинаковы, то ваша проблема заключается в том, как использовать выражения.Если значение @ThisField равно Col1 и является числовым, а затем @ThisField становится Col2, который представляет собой текст, поток данных завершится сбоем, поскольку метаданные не могут изменяться во время выполнения.

Мои метаданные не изменяются, объясните выраженияpart

Переменные не работают с запросами, как у вас сейчас, но вы на правильном пути.Вместо этого определите новую переменную @[User::QuerySource], тип данных String и укажите, что значение является выражением.Тогда ваше выражение станет таким же, как у вас сейчас.

"SELECT ISNULL("
+ (DT_WSTR, 20)@[User::ThisID]
+ ", 0) AS EEDFID, "
+ @[User::ThisField] 
+ " AS MyFieldAlias "
+ ", EeID FROM EeExtraDetails "

Конкатенация строк в языке выражений SSIS работает только со строками, поэтому я явно преобразовал ваш @User :: ThisID как строку.Если я неверно истолковал это и вы намеревались использовать функцию ISNULL языка выражений SSIS, то это другой синтаксис.В любом случае, нажмите «оценить», и вы должны увидеть, выглядит ли ваш запрос приблизительно верным для значений времени разработки.

Мои метаданные действительно меняются

Лучшее, что вы можете сделать в этой ситуации, - это броситьрезультаты @ [User :: ThisField] в строку в выражении SQL, например

+ "CAST(", @[User::ThisField, " AS nvarchar(4000))"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...