powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / SSIS | програмная настройка data flow task
25 сообщений из 39, страница 1 из 2
SSIS | програмная настройка data flow task
    #39740001
Фотография Yagrus2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hello world!
Стоит задача разбивать данные таблицы-источника по годам и класть их в соответствующие таблицы-назначения. Например, за 2018 год данные должны попасть в T_2018, а за 2017 в T_2017.
Подскажите, возможно ли это сделать используя data flow task и его expressions?
...
Рейтинг: 0 / 0
SSIS | програмная настройка data flow task
    #39740005
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yagrus2Hello world!
Стоит задача разбивать данные таблицы-источника по годам и класть их в соответствующие таблицы-назначения. Например, за 2018 год данные должны попасть в T_2018, а за 2017 в T_2017.
Подскажите, возможно ли это сделать используя data flow task и его expressions?

Религиозные убеждения не дозволяют использовать insert select?
...
Рейтинг: 0 / 0
SSIS | програмная настройка data flow task
    #39740061
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yagrus2Hello world!
Стоит задача разбивать данные таблицы-источника по годам и класть их в соответствующие таблицы-назначения. Например, за 2018 год данные должны попасть в T_2018, а за 2017 в T_2017.
Подскажите, возможно ли это сделать используя data flow task и его expressions?Испоьзуйте внутри таска Conditional Split
...
Рейтинг: 0 / 0
SSIS | програмная настройка data flow task
    #39740276
Ferdipux
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Yagrus2Hello world!
Стоит задача разбивать данные таблицы-источника по годам и класть их в соответствующие таблицы-назначения. Например, за 2018 год данные должны попасть в T_2018, а за 2017 в T_2017.
Подскажите, возможно ли это сделать используя data flow task и его expressions?

Можно и без Expressions. Делаете в Data Flow источник - SQL from variable для выборки данных определенного года, получатель данных - Table name from variable, и в цикле крутите заполнение таблиц, модифицируя переменные через Expression. Или как alexeyvg выше предлагал - через Conditional Split.
...
Рейтинг: 0 / 0
SSIS | програмная настройка data flow task
    #39740358
msLex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FerdipuxYagrus2Hello world!
Стоит задача разбивать данные таблицы-источника по годам и класть их в соответствующие таблицы-назначения. Например, за 2018 год данные должны попасть в T_2018, а за 2017 в T_2017.
Подскажите, возможно ли это сделать используя data flow task и его expressions?

Можно и без Expressions. Делаете в Data Flow источник - SQL from variable для выборки данных определенного года, получатель данных - Table name from variable, и в цикле крутите заполнение таблиц, модифицируя переменные через Expression. Или как alexeyvg выше предлагал - через Conditional Split.
Автору destination менять нужно, а не source.

Yagrus2,
Если список получателей динамический, используйте Script Component в качестве destination.
Если фиксированный, то, как уже говорили выше, Conditional Split
...
Рейтинг: 0 / 0
SSIS | програмная настройка data flow task
    #39740376
Ferdipux
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
msLexАвтору destination менять нужно, а не source.

Yagrus2,
Если список получателей динамический, используйте Script Component в качестве destination.


Если таблицы имеют одинаковый набор колонок, их названия и тип - то вполне работает метод с именем таблицы из переменной в OLE DB Destination. Попроще будет чем программировать Script Destination, динамику тоже поддерживает.
...
Рейтинг: 0 / 0
SSIS | програмная настройка data flow task
    #39740433
Фотография Yagrus2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ferdipux,
Решил попробовать реализовать через SQL from variable
Для этого использую Execute SQL Task, чтобы заполнить соответствующие переменные:
Переменная Data typeiQuarterList ObjectsQuarterList ObjectВ настройках Execute SQL Task, в SQLStatment находится запрос, возвращающий такой набор:
sQuarter iQuarter2014_06 2014062014_04 2014042014_05 2014052014_09 201409А на вкладке Result Set задал такое соответствие

sQuarter --> sQuarterList
iQuarter --> iQuarterList

Работа пакета завершается ошибкой .
[Execute SQL Task] Error: There is an invalid number of result bindings returned for the ResultSetType: "ResultSetType_Rowset".

Подскажите, что нужно поменять в настройках?

p.s. - Если запрос возвращает один столбец, то на вкладке Result Set, для Result Name нужно указать 0.
...
Рейтинг: 0 / 0
SSIS | програмная настройка data flow task
    #39740445
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FerdipuxmsLexАвтору destination менять нужно, а не source.

Yagrus2,
Если список получателей динамический, используйте Script Component в качестве destination.


Если таблицы имеют одинаковый набор колонок, их названия и тип - то вполне работает метод с именем таблицы из переменной в OLE DB Destination. Попроще будет чем программировать Script Destination, динамику тоже поддерживает.Не пойму, для каждой строки из исходной таблицы нужно будет менять OLE DB Destination?
По моему, вы не понимаете, в чём задача :-)

Таким способом можно перебрать OLE DB Destination в цикле, но тогда придётся делать исходную выборрку столько раз, сколько будет разных OLE DB Destination, что неэффективно

Так зачем замедлять, если есть специально предназначенный для разделения потока данных Conditional Split?
...
Рейтинг: 0 / 0
SSIS | програмная настройка data flow task
    #39740566
Glebanski
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А почему никто не предлагает сделать partitioned view, под ним таблицы с Constraints на даты? Тогда destination вообще один будет, а все записи поза вас сервер по таблицам раскидает.
...
Рейтинг: 0 / 0
SSIS | програмная настройка data flow task
    #39740696
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GlebanskiА почему никто не предлагает сделать partitioned view, под ним таблицы с Constraints на даты? Тогда destination вообще один будет, а все записи поза вас сервер по таблицам раскидает.Мда, что то в голову не пришло, обычно в таких случаех это и советовали...
Единственно, балк инсёрт при этом невозможен, производительность Data Flow task резко упадёт, и, соответственно, применимость такого решения зависит от объёмов данных.
...
Рейтинг: 0 / 0
SSIS | програмная настройка data flow task
    #39740738
Ferdipux
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Yagrus2,

Вам для получения результатов запроса нужно использовать только 1 переменную типа Object. Если Connection manager типа OLEDB - смаппить эту переменную на элемент 0.
...
Рейтинг: 0 / 0
SSIS | програмная настройка data flow task
    #39740779
Фотография Yagrus2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FerdipuxYagrus2,

Вам для получения результатов запроса нужно использовать только 1 переменную типа Object. Если Connection manager типа OLEDB - смаппить эту переменную на элемент 0.
Я так и делаю.
Захотелось поэкспериментировать и инициализировать две переменных. Каждая с типом Object.
Но не вышло, получил ошибку:
[Execute SQL Task] Error: There is an invalid number of result bindings returned for the ResultSetType: "ResultSetType_Rowset".
Всегда должна быть одна переменная?
...
Рейтинг: 0 / 0
SSIS | програмная настройка data flow task
    #39740878
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yagrus2Но не вышло, получил ошибку:
[Execute SQL Task] Error: There is an invalid number of result bindings returned for the ResultSetType: "ResultSetType_Rowset".
Всегда должна быть одна переменная?В смысле, вы хотите положить одно значение в 2 переменных?
Так нельзя, да, всегда должна быть только одна переменная.
...
Рейтинг: 0 / 0
SSIS | програмная настройка data flow task
    #39740986
Фотография Yagrus2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvg,
Нет.
Запрос возвращает два столбца. Каждый столбец хотел бы положить в свою переменную типа Object
...
Рейтинг: 0 / 0
SSIS | програмная настройка data flow task
    #39741008
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yagrus2alexeyvg,
Нет.
Запрос возвращает два столбца. Каждый столбец хотел бы положить в свою переменную типа ObjectНу, для типа ResultSetType_Rowset весь рекордсет возвращается как одно значение.
Да и зачем это нужно, ну, будет 2 коллекции с записями, вместо одной, это же неудобно, как сопроставлять записи?
...
Рейтинг: 0 / 0
SSIS | програмная настройка data flow task
    #39741953
Фотография Yagrus2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvgНу, для типа ResultSetType_Rowset весь рекордсет возвращается как одно значение.
Да и зачем это нужно, ну, будет 2 коллекции с записями, вместо одной, это же неудобно, как сопроставлять записи?
А для чего тогда есть возможность создавать несколько отношений между Rowset - ом и переменными?
...
Рейтинг: 0 / 0
SSIS | програмная настройка data flow task
    #39742018
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yagrus2,

SQL выражение может вернуть несколько наборов данных. При этом для каждого можно определить свою переменную-объект.
...
Рейтинг: 0 / 0
SSIS | програмная настройка data flow task
    #39742103
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yagrus2alexeyvgНу, для типа ResultSetType_Rowset весь рекордсет возвращается как одно значение.
Да и зачем это нужно, ну, будет 2 коллекции с записями, вместо одной, это же неудобно, как сопроставлять записи?
А для чего тогда есть возможность создавать несколько отношений между Rowset - ом и переменными?

Вообще справа внизу окошка есть кропка с надписью Help, при нажатии которой вам будет показано нечто интересное :-)
В частности:
"If the result set type is Full result set or XML, you must use 0 as the result set name."

А возможность создавать несколько отношений между Rowset - ом и переменными предназначена для другого типа возврата - Single row
В этом случае в каждую переменную записывается значение из первой строки рекордсета, из колонки, имя которой указано в Relult Name
Это всё тоже описано в том же хелпе, с примерами, как потом использовать результаты.

Владислав КолосовSQL выражение может вернуть несколько наборов данных. При этом для каждого можно определить свою переменную-объект.Разве? Я думал, что остальные рекордметы (и соответстенно маппинг) игнорируются. По крайней мере так описано в хелпе; впрочем, работать может и не совсем так, как описано :-)
"If the Execute SQL task uses the Full result set result set and the query returns multiple rowsets, the task returns only the first rowset . If this rowset generates an error, the task reports the error. If other rowsets generate errors, the task does not report them."
...
Рейтинг: 0 / 0
SSIS | програмная настройка data flow task
    #39742105
Glebanski
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Весь рассказ выглядит как-то сомнительно с бизнес-точки зрения. ИМХО конечно.
задача разбивать данные таблицы-источника по годам и класть их в соответствующие таблицы-назначения. Например, за 2018 год данные должны попасть в T_2018, а за 2017 в T_2017

Задача- разбить или разбивать? Источника или источников? Если у вас есть таблица-источник с данными за 2017, то сколько раз вы ее "переложите" в другую? Данные за 2017 уже не станут внезапно данными за 2016, не так ли. Их достаточно ведь переложить один раз?

А данные за 2018. Вы же не собираетесь каждый день копировать данные за январь 2018? Они же уже находятся в T_2018?

Я к тому, что если процедура однократная, то и нечего городить сложные коды. Данные можно условно говоря и на флешке перенести. Уж те, что до 01-01-2018 точно. Написать можно и супер-корявый код, запустить его один раз и забыть.

А если это ежедневный процесс, то у вас и таргет почти всегда один - T_Номер_Текущего_год. Вы же не делаете "delete from T_2018", перед там все заново "класть". Если это так, то можно по идее
- Set "Data access mode" to "Table name or view name variable - fast load"
- Set the variable name to User::TargetTable
, где TargetTable выставлять через параметр при запуске.
Ну и чтоб совсем безопасно, MERGE вместо INSERT использовать.
Как-то так...
...
Рейтинг: 0 / 0
SSIS | програмная настройка data flow task
    #39742106
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvg,

давно не брал в руки шашки, но, насколько я помню, для разных драйверов по-разному. Для OLE DB они нумеруются с нуля и дальше. Рекордсет номер 2 будет иметь номер 1 и так далее.
...
Рейтинг: 0 / 0
SSIS | програмная настройка data flow task
    #39742134
Ferdipux
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Владислав Колосовдавно не брал в руки шашки, но, насколько я помню, для разных драйверов по-разному. Для OLE DB они нумеруются с нуля и дальше. Рекордсет номер 2 будет иметь номер 1 и так далее.
Это вы путаете колонки и рекордсеты. Для OLEDB - колонки имеют номера, начиная с 0, для ADO.NET - можно использовать имена.
Как утверждает документация Microsoft , в Execute SQL Task всегда возвращается только первый рекордсет.
...
Рейтинг: 0 / 0
SSIS | програмная настройка data flow task
    #39742156
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FerdipuxВладислав Колосовдавно не брал в руки шашки, но, насколько я помню, для разных драйверов по-разному. Для OLE DB они нумеруются с нуля и дальше. Рекордсет номер 2 будет иметь номер 1 и так далее.
Это вы путаете колонки и рекордсеты. Для OLEDB - колонки имеют номера, начиная с 0, для ADO.NET - можно использовать имена.Да, тоже припоминаю, что в одном случае колонки по номерам, а в другом по именам.

Значит, всё таки несколько рекордсетов использовать нельзя :-(

Жаль, всё таки принцип наличия нескольких рекордсетов - фишка, выгодно выделявшая сиквел, но почему то нельзя это использовапть как внутри сиквела, так и в миерософтовких клиентах, типа SSIS или SSRS.
...
Рейтинг: 0 / 0
SSIS | програмная настройка data flow task
    #39742254
tunknown
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvgЖаль, всё таки принцип наличия нескольких рекордсетов - фишка, выгодно выделявшая сиквел, но почему то нельзя это использовапть как внутри сиквела, Кажется, в ограниченном числе случаев можно. Но только при полном совпадении по набору полей и их типу.
...
Рейтинг: 0 / 0
SSIS | програмная настройка data flow task
    #39742336
Фотография a_voronin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yagrus2Hello world!
Стоит задача разбивать данные таблицы-источника по годам и класть их в соответствующие таблицы-назначения. Например, за 2018 год данные должны попасть в T_2018, а за 2017 в T_2017.
Подскажите, возможно ли это сделать используя data flow task и его expressions?

Я бы не долго думая сделал бы сразу кучу потов от 2015 до 2035 года и прописал бы все назначения.

Можно даже сгенерить пакет и таблицы кодом, если таких потов много.
...
Рейтинг: 0 / 0
SSIS | програмная настройка data flow task
    #39742337
Фотография a_voronin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yagrus2,


А вообще есть партиционирование
...
Рейтинг: 0 / 0
25 сообщений из 39, страница 1 из 2
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / SSIS | програмная настройка data flow task
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]