Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 SSIS получение значений из БД  [new]
BKV88
Member

Откуда: Москва
Сообщений: 243
Добрый день!
Стоит задача загружать xml используя soap.
В soap передается связка логин и пароль, которые необходимо получать из БД.
В SSIS создал пакет используя Web Services Task, который данные берет из переменных. Все работает.
А вот как создать пакет, чтобы данные тянулись из базы в цикле.
Примерно представляю, что для этих вещей нужно использовать Foreach Loop Container, но что-то пока не пойму как именно передавать в него значения.
С SSIS только разбираюсь, поэтому прошу вашей помощи.
Возможно описал не грамотно, но суть думаю понятна.
23 дек 14, 16:02    [17041102]     Ответить | Цитировать Сообщить модератору
 Re: SSIS получение значений из БД  [new]
BKV88
Member

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

Разобрался, надо еще использовать в связке Execute SQL Task
23 дек 14, 16:42    [17041416]     Ответить | Цитировать Сообщить модератору
 Re: SSIS получение значений из БД  [new]
BKV88
Member

Откуда: Москва
Сообщений: 243
Возник другой вопрос.
Как присваивать уникальное имя для файла, когда задаешь Output в Web Services Task?
Ну или как сделать так чтобы на диск xml сохранялись с разным именем?
23 дек 14, 16:49    [17041478]     Ответить | Цитировать Сообщить модератору
 Re: SSIS получение значений из БД  [new]
Гузы
Guest
BKV88,

Execute SQL Task
SELECT ? = ?+?
23 дек 14, 17:38    [17041729]     Ответить | Цитировать Сообщить модератору
 Re: SSIS получение значений из БД  [new]
BKV88
Member

Откуда: Москва
Сообщений: 243
Гузы,

А причем тут это?
Вы предлагаете так же в переменную имя файла загонять?
23 дек 14, 17:40    [17041737]     Ответить | Цитировать Сообщить модератору
 Re: SSIS получение значений из БД  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
BKV88
Гузы,

А причем тут это?
Вы предлагаете так же в переменную имя файла загонять?
Something like this:

FILE connection -> Expressions -> 
  ConnectionString:  "filename_" + @[User::FileNameId] + ".xml"

Expression Task ->
@[User::FileNameId] = @[User::FileNameId] + 1
24 дек 14, 02:04    [17043188]     Ответить | Цитировать Сообщить модератору
 Re: SSIS получение значений из БД  [new]
BKV88
Member

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

Не совсем понимаю, где этот код надо указывать.
До этого было прописано в Web Services Task -> OutputType FileConnection и прописано создавать новый файл и был пропсиан путь к создаваемому файлу.
При загрузке >1 xml файл перезаписывался последним xml.
Создал Variable с типом String указал путь к файлу.
Настроил OutputType Variable в Web Services Task и указал значение переменной.
Пакет обрабатывает без ошибок, но файл нигде не создается.
Конечно можно добавить в пакет Data Flow Task и парсить файлы сразу в БД, но есть такая хотелка, чтобы файлы так же создавались на диске.
24 дек 14, 12:36    [17045089]     Ответить | Цитировать Сообщить модератору
 Re: SSIS получение значений из БД  [new]
BKV88
Member

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

Вернее не файл нигде не создается, а файл не обновляется.
В переменной указано D:\SSIS\soap\test.xml
24 дек 14, 12:47    [17045191]     Ответить | Цитировать Сообщить модератору
 Re: SSIS получение значений из БД  [new]
BKV88
Member

Откуда: Москва
Сообщений: 243
Как я понял при выборе переменной в неё записывается результат выполнения.
24 дек 14, 12:54    [17045257]     Ответить | Цитировать Сообщить модератору
 Re: SSIS получение значений из БД  [new]
BKV88
Member

Откуда: Москва
Сообщений: 243
Как я понял нужно в Output загнать в Variable.
В пакет добавить Script Task, а уже в нем прописать код сохранения в разных файлах.
Только вот, что там прописать пока не могу понять.
25 дек 14, 12:39    [17050576]     Ответить | Цитировать Сообщить модератору
 Re: SSIS получение значений из БД  [new]
HandKot
Member

Откуда: Sergiev Posad
Сообщений: 3058
BKV88, можно конечно и как Вы хотите, если не любите простых решений.
Чем Вас не устраивает предложение

Mind
FILE connection -> Expressions -> 
  ConnectionString:  "filename_" + @[User::FileNameId] + ".xml"

Expression Task ->
@[User::FileNameId] = @[User::FileNameId] + 1

25 дек 14, 13:20    [17050882]     Ответить | Цитировать Сообщить модератору
 Re: SSIS получение значений из БД  [new]
HandKot
Member

Откуда: Sergiev Posad
Сообщений: 3058
BKV88
Mind,

Не совсем понимаю, где этот код надо указывать.
До этого было прописано в Web Services Task -> OutputType FileConnection и прописано создавать новый файл и был пропсиан путь к создаваемому файлу.

если Вам не понятно, то надо было уточнить и почитать доку.
Если Вам было лень, то поясню:
После создания FileConnection в OutPut у вас в окне соединений появится созданное Вами соединение. Вот в его св-вах найти Expressions и задать ConnectionString
если брать код Mind, то для полного фунциклирования необходимо создать еще одну переменную. Можно ее заменить распарсивая дату для получения уникального имени
25 дек 14, 13:28    [17050949]     Ответить | Цитировать Сообщить модератору
 Re: SSIS получение значений из БД  [new]
BKV88
Member

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

Я не разобрался куда это внести.
25 дек 14, 13:28    [17050954]     Ответить | Цитировать Сообщить модератору
 Re: SSIS получение значений из БД  [new]
HandKot
Member

Откуда: Sergiev Posad
Сообщений: 3058
BKV88, мое пояснение Вас устраивает или что-то непонятно?
25 дек 14, 13:59    [17051174]     Ответить | Цитировать Сообщить модератору
 Re: SSIS получение значений из БД  [new]
BKV88
Member

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

Из ваших объяснений что-то прояснилось.
Создал строковую переменную FileNameId
Для File Connection нашел Expressions, задал в свойстве ConnectionString
"D:\\SSIS\\soap\\filename_" + @[User::FileNameId] + ".xml"


Чтобы имя файла изменялось теперь надо задать

@[User::FileNameId] = @[User::FileNameId] + 1

Как я понял это надо задать в Execute SQL в Expressions.
Вот с этим проблемы. Не могу понять какое там свойство выбирать
25 дек 14, 14:16    [17051280]     Ответить | Цитировать Сообщить модератору
 Re: SSIS получение значений из БД  [new]
BKV88
Member

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

Типы данных "DT_WSTR" и "DT_I4" несовместимы для бинарного оператора "+". Типы операндов не могут быть неявно приведен в совместимых типов для операции. Чтобы выполнить эту операцию, один или оба операнда должны быть явно приведены с оператора приведения.
25 дек 14, 14:19    [17051305]     Ответить | Цитировать Сообщить модератору
 Re: SSIS получение значений из БД  [new]
HandKot
Member

Откуда: Sergiev Posad
Сообщений: 3058
BKV88
Создал строковую переменную FileNameId
Для File Connection нашел Expressions, задал в свойстве ConnectionString
"D:\\SSIS\\soap\\filename_" + @[User::FileNameId] + ".xml"

здесь все правильно

BKV88
Чтобы имя файла изменялось теперь надо задать

@[User::FileNameId] = @[User::FileNameId] + 1

Как я понял это надо задать в Execute SQL в Expressions.
Вот с этим проблемы. Не могу понять какое там свойство выбирать

если у Вас 2012, то там вроде появился новый компонент "Expression Task" и все делать в нем
если ниже, то использовать "Execute SQL" и в нем прописать как писал
Гузы
SELECT ? = ?+?

и в свовах таска указать переменную @[User::FileNameId] как read-write
25 дек 14, 14:33    [17051402]     Ответить | Цитировать Сообщить модератору
 Re: SSIS получение значений из БД  [new]
HandKot
Member

Откуда: Sergiev Posad
Сообщений: 3058
вот пример увеличения переменной
25 дек 14, 14:37    [17051463]     Ответить | Цитировать Сообщить модератору
 Re: SSIS получение значений из БД  [new]
BKV88
Member

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

Спасибо. Все получилось
25 дек 14, 15:21    [17051907]     Ответить | Цитировать Сообщить модератору
 Re: SSIS получение значений из БД  [new]
BKV88
Member

Откуда: Москва
Сообщений: 243
Получилось создавать файлы с именами логинов, который передается из БД и который в свою очередь передается так же в soap.
Использовал для этого Script Task

string FileNameId = (string)Dts.Variables["FileNameId"].Value;
string Address = (string)Dts.Variables["Address"].Value;
Dts.Variables["FileNameId"].Value = Address;



Пакет выглядит вот так

К сообщению приложен файл. Размер - 21Kb
25 дек 14, 15:30    [17051998]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить