Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / OLAP и DWH Новый топик    Ответить
 SSIS - execute SQL task. Как получить данные из временной таблицы?  [new]
User2155
Member

Откуда:
Сообщений: 48
Добрый день,
мне нужно "на лету" создать большую команду SQL для чужого сервера (не SQL).
Для этого я использую Execute SQL Task чтобы эту команду склеить из кусочков. Порядок работы:

1) Заполняю SQLStatement.
Что-то вроде этого:
-- Переменная для работы
declare @my_command nvarchar(max);

-- Формируем команду SQL (тут может быть довольно много кода)
set @my_command = 'select from tbl_main where (......)';
set @my_command = replace(@my_command, 'old_val', 'new_val');
set @my_command = '.....';

-- Вот этот кодик выводит финальную команду SQL и я хочу прочитать её в SSIS пакете
select @my_command as col1;


3) На вкладке General пишу что resultset должен быть SingleRow.

2) На вкладке ResultSet показываю что переменная должна прочитать значение колонки col1.

Нифига не работает. SSIS пакет не хочет читать значение колонки col1.
Я уже с этим сталкивался - это из-за выборки "на лету". Т.е. вот этого: select @my_command as col1;
Если бы там стояла реальная таблица, то все было бы хорошо. Как победить??

Спасибо.
2 окт 17, 16:33    [20836828]     Ответить | Цитировать Сообщить модератору
 Re: SSIS - execute SQL task. Как получить данные из временной таблицы?  [new]
User2155
Member

Откуда:
Сообщений: 48
Выкрутился.

1) Создал Data Flow Task.
2) Дальше "Ole DB Source" и там сформировал команду SQL.
3) Добавил "Script component" в режиме "Destination" и присвоил значения переменным.
2 окт 17, 17:39    [20837050]     Ответить | Цитировать Сообщить модератору
 Re: SSIS - execute SQL task. Как получить данные из временной таблицы?  [new]
Alex_496
Member

Откуда: Moscow http://dvbi.ru
Сообщений: 3466
склеивать из кусочков динамический sql, к тому же большой - моветон, ИМХО
2 окт 17, 18:12    [20837145]     Ответить | Цитировать Сообщить модератору
 Re: SSIS - execute SQL task. Как получить данные из временной таблицы?  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 4625
User2155
Я уже с этим сталкивался - это из-за выборки "на лету". Т.е. вот этого: select @my_command as col1;
отнюдь... это нормально работает.
другой вопрос где у вас здесь "временная таблица"?
и надеюсь вы понимаете, что nvarchar(max) это вовсе не string?
3 окт 17, 00:47    [20837724]     Ответить | Цитировать Сообщить модератору
 Re: SSIS - execute SQL task. Как получить данные из временной таблицы?  [new]
Ferdipux
Member

Откуда: Москва
Сообщений: 399
User2155
Добрый день,
мне нужно "на лету" создать большую команду SQL для чужого сервера (не SQL).
Для этого я использую Execute SQL Task чтобы эту команду склеить из кусочков.
...


А зачем так, довольно странный способ. Есть гораздо лучше и проще - называется variable expressions. Вы можете для переменной определить выражение для вычисления, и оно будет вычислено при обращении к переменной.
3 окт 17, 10:18    [20838124]     Ответить | Цитировать Сообщить модератору
 Re: SSIS - execute SQL task. Как получить данные из временной таблицы?  [new]
Ferdipux
Member

Откуда: Москва
Сообщений: 399
User2155,

К вашему исходному вопросу - если вы используете OLEDB connection manager, то выходные параметры задаются как номера столбцов. То есть в вашем случае - задавайте номер колонки 0 и читайте его.
По именам читать умеют только ADO.NET connection manager, но там свои проблемы.
3 окт 17, 10:20    [20838137]     Ответить | Цитировать Сообщить модератору
 Re: SSIS - execute SQL task. Как получить данные из временной таблицы?  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 4625
Ferdipux
если вы используете OLEDB connection manager,
то выходные параметры задаются как номера столбцов.
То есть в вашем случае - задавайте номер колонки 0 и читайте его.
и чем вам имена полей не угодили?
3 окт 17, 11:25    [20838398]     Ответить | Цитировать Сообщить модератору
 Re: SSIS - execute SQL task. Как получить данные из временной таблицы?  [new]
ShIgor
Member

Откуда: Нижний Новгород
Сообщений: 1955
Ferdipux,

про expression для variable - это здорово сам пользуюсь, но если или преобразования сложные или составных частей много, то их всех надо предварительно загнать в свои переменные, а если кроме этого они больше не нужны какой смысл? тем более что код выражения получается абсолютно не читаемый в этом случае и для его редактирования приходится пользоваться внешними редакторами.. а уж что-то поправить быстро вообще не удобно.
поэтому иногда Execute SQL Task или Script Task предпочтительнее.
3 окт 17, 12:34    [20838607]     Ответить | Цитировать Сообщить модератору
 Re: SSIS - execute SQL task. Как получить данные из временной таблицы?  [new]
Ferdipux
Member

Откуда: Москва
Сообщений: 399
Дедушка,

Да, вы правы, должно читать. Видимо, фантомы после SSIS 2005/2008, там были гм, специфики...
3 окт 17, 19:48    [20840106]     Ответить | Цитировать Сообщить модератору
Все форумы / OLAP и DWH Ответить