Это не сработает.Если предположить, что все типы данных @ [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))"