2014-10-23 2 views
0

Есть ли способ использовать переменную из части (например, SELECT myColumn1 FROM?) В потоке задачи - источник, не давая переменной действительное значение по умолчанию вначале ?Использование переменных из части источника потока задачи

Чтобы быть более точным, в моей ситуации это так, что я получаю табличные таблички из таблицы, а затем использую рабочий процесс управления для предпросмотра по списку имен таблиц, а затем вызываю рабочий процесс изнутри, а затем получаю данные из эти таблицы каждый. В этом рабочем процессе у меня есть предыдущий оператор SELECT.

Чтобы заставить его работать должным образом, я должен был установить переменную в допустимое значение по умолчанию (на уровне пакета), так как иначе я не смог бы создать сам рабочий процесс (поскольку источник данных не мог быть создан, так как выбор был недействителен без значение по умолчанию).

Итак, мой вопрос здесь: есть ли возможное обходное решение в этом случае, когда мне не нужно действительное значение по умолчанию для переменной?

В DataTables: различных таблицы, которые выбраны в потоке данных имеют точно такое же таблицы в терминах столбцов (таким образом, какие столбцы, присвоение имен столбцов и типов данных столбцов). Только данные внутри них различны (поэтому его данные для клиента A, клиента B, ....).

+0

ли столбцы будут иметь одинаковые отсчеты и тип данных, или они будут изменяться в зависимости от источника? – billinkc

+0

Я обновил вопрос с вашим вопросом. Таблицы абсолютно одинаковы (только данные внутри разные, но столбцы ... одинаковы) – Thomas

ответ

2

Вам повезло, так как это тривиальная вещь для реализации с помощью SSIS.

Основная проблема для большинства людей заключается в том, что они приходят в SSIS, так же как и DTS, где вы можете делать все, что хотите, в потоке данных. Они исключили гибкость с DTS в пользу производительности необработанной обработки.

Вы не можете параметризовать таблицу в инструкции SQL. Это просто запрещено.

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

Предположим, что [dbo]. [Spt_values] присвоено QualifiedTableName. Когда вы перебираете имена таблиц, вы присваиваете значение этой переменной.

«Трюк» заключается в применении выражения к @ [User :: QuerySource].Сделайте выражение

"SELECT T.* FROM " + @[User::QualifiedTableName] + " AS T;" 

Это позволяет изменять имя таблицы при изменении значения другой переменной.

В вашем потоке данных вы измените свой источник OLE DB, который будет управляться запросом, содержащимся в переменной, вместо традиционного выбора таблицы.

Если вы хотите пример, где я использую QuerySource управлять потоком данных, есть пример на mixing an integer and string in an ssis derived column

+0

Имел огромную проблему с использованием SQL, пока не увидел, что я положил его в значение вместо столбца выражения переменной – Thomas

2
  1. Создайте вторую переменную. Задайте выражение для создания полного оператора Select, используя значение первой переменной.
  2. В источнике данных используйте параметр «SQL command from variable» для свойства «Режим доступа к данным» .
  3. Если вы можете, установите значение по умолчанию для переменной, которую вы создали на этапе
    1. Это значительно упростит заполнение столбцов из вашего источника данных.
  4. Если вы не можете использовать значение по умолчанию для переменной, установите для свойства ValidateExternalMetadata источника значение False.
  5. Возможно, вам придется открыть источник данных с помощью расширенного редактора, а создать столбцы вывода вручную.
+0

+1 для вашего ответа, так как он также правильный (и по существу такой же, как и принятый). В конце концов, я выбрал ответ на billinkccs, поскольку он дополнительно включил примеры того, как создавать эти выражения. – Thomas

Смежные вопросы