Модераторы: Akina
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Работа с DTS 
:(
    Опции темы
dimych83
Дата 4.3.2008, 10:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 81
Регистрация: 21.3.2007
Где: Красноярск

Репутация: нет
Всего: нет



Добрый день!

У меня есть периодическая задача. 
1 шаг. Выполняется хранимая процедура, которая вставляет одну строку в таблицу №1. Эта таблица, помимо всего, содержит поле id_t (авт. инкриментируется при добавлении новой записи).
2 шаг. Выполняется DTS пакет, который из Excel файла импортирует данные в таблицу №2.
В таблице №2 есть поле id_task, связанное с полем id_t табл. №1. Так вот, надо чтобы при выполнении шага 2 поле id_task принимало значение, которое устанавливается в шаге 1. 

Пример: 
Шаг 1. В табл. 1 заносится запись (значение id_t устанавливается автоматичсеки): 
id_t   description
100   test 

Шаг 2.  В табл. 2 импортируются записи (значение id_task должно устанавливаться в момент импорта и должно совпадать со значением id_t на шаге 1):
id   id_task   name
1    100        abc
2    100        abc
3    100        abc

Помогите пожалуйста! Совсем уже замучался.


Это сообщение отредактировал(а) dimych83 - 4.3.2008, 10:43
PM MAIL ICQ   Вверх
ТоляМБА
Дата 4.3.2008, 10:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Котэ
***


Профиль
Группа: Завсегдатай
Сообщений: 1607
Регистрация: 15.12.2004

Репутация: нет
Всего: 252



А что нельзя на втором шаге импортировать во временную таблицу, потом запускать хранимку, в которой присваивать переменной значение id_t, вставлять через Insert into ... Select во вторую таблицу, а затем убивать временную?

PM   Вверх
dimych83
Дата 4.3.2008, 11:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 81
Регистрация: 21.3.2007
Где: Красноярск

Репутация: нет
Всего: нет



Цитата(ТоляМБА @ 4.3.2008,  10:52)
А что нельзя на втором шаге импортировать во временную таблицу, потом запускать хранимку, в которой присваивать переменной значение id_t, вставлять через Insert into ... Select во вторую таблицу, а затем убивать временную?

Во, спасибо за свежую мысль! smile
PM MAIL ICQ   Вверх
Itsys
Дата 4.3.2008, 19:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1338
Регистрация: 21.1.2008
Где: г. Москва

Репутация: 1
Всего: 34



Вообщето можно узнать значение инкремента:
Код

INSERT INTO jobs (job_desc,min_lvl,max_lvl)
VALUES ('Accountant',12,125)
SELECT @@IDENTITY AS 'Identity'

PM MAIL WWW Skype   Вверх
dimych83
Дата 5.3.2008, 10:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 81
Регистрация: 21.3.2007
Где: Красноярск

Репутация: нет
Всего: нет



Цитата(Itsys @ 4.3.2008,  19:48)
Вообщето можно узнать значение инкремента:
Код

INSERT INTO jobs (job_desc,min_lvl,max_lvl)
VALUES ('Accountant',12,125)
SELECT @@IDENTITY AS 'Identity'

Тогда еще вопрос...
Вставка строки производится на 1 шаге, на 2 шаге выполняется DTS пакет. 
Сохраниться ли значение @@IDENTITY при выполнении 2 шага? Если нет, то как мне его получить внутри пакета? Или может можно как-нибудь передать в него значение?
PM MAIL ICQ   Вверх
SharedNoob
Дата 5.3.2008, 11:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 125
Регистрация: 25.6.2007
Где: UA

Репутация: 2
Всего: 5



Может я чего то не пойму, но все же ? зачем вам проставлять это поле во время выполнения ДТС пакета ?
не проще ли сделить так как предложил ТоляМБА ?
То есть :
1) Добавляем запись в таблицу табл. 1
2) Выполняем импорт данных через дтс пакет в (условно)ВРЕМЕННУЮ таблицу TMP_табл2.
3) Запускаем на выполнение хранимую процедуру в коде которой будет примерно такое:
Код

  Insert into табл2 ( ..... список полей .....)
            select ..... список полей .....
            from TMP_табл2
               left join табл. 1 on условие (если нужно, а если там 100% только одна запись можно поставить просто 1=1)


То есть данные импортируем во временную таблицу, а из нее в реальную переносим по средствам хранимой процедуры с оператором insert.
здается мне что все просто, зачем завязываться на некие глобальные переменные аля @@IDENTITY не понимаю.
PM MAIL ICQ Skype   Вверх
dimych83
Дата 6.3.2008, 08:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 81
Регистрация: 21.3.2007
Где: Красноярск

Репутация: нет
Всего: нет



Цитата(SharedNoob @ 5.3.2008,  11:45)
Может я чего то не пойму, но все же ? зачем вам проставлять это поле во время выполнения ДТС пакета ?
не проще ли сделить так как предложил ТоляМБА ?
То есть :
1) Добавляем запись в таблицу табл. 1
2) Выполняем импорт данных через дтс пакет в (условно)ВРЕМЕННУЮ таблицу TMP_табл2.
3) Запускаем на выполнение хранимую процедуру в коде которой будет примерно такое:
Код

  Insert into табл2 ( ..... список полей .....)
            select ..... список полей .....
            from TMP_табл2
               left join табл. 1 on условие (если нужно, а если там 100% только одна запись можно поставить просто 1=1)


То есть данные импортируем во временную таблицу, а из нее в реальную переносим по средствам хранимой процедуры с оператором insert.
здается мне что все просто, зачем завязываться на некие глобальные переменные аля @@IDENTITY не понимаю.

Все сделал.
Только зачем нужна ХП с insert into? 
Я импортирую данные во временную таблицу, далее выполняю процедуру в которой сначала получаю макс. ID из таблицы 1, то есть ID с которым вставилась строка на 1 шаге. И делаю update всем записям временной таблицы. Далее, также в пакете DTS, делаю импорт из временной таблицы в реальную.
PM MAIL ICQ   Вверх
SharedNoob
Дата 6.3.2008, 09:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 125
Регистрация: 25.6.2007
Где: UA

Репутация: 2
Всего: 5



smile просто все что вы сделали руками можно было всписать в хранимую процедуру, и в следующий раз не думая ни о чем делать exec StoredProcedure которая уже сама найдем максимальное значение в первой таблице и вставит данные во вторую smile

p.s.
И еще ко всему этому, импорт данных из файла (к примеру DBF) можно просто выполнять в хранимой процедуре без использования ДТС.

Это сообщение отредактировал(а) SharedNoob - 6.3.2008, 09:33
PM MAIL ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "MS SQL"
Akina

Akina

Запрещается!

Публиковать ссылки и обсуждать взлом чего бы то ни было.

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы составления неспецифических запросов рассматриваются здесь
  • Используйте теги [code=sql][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Zloxa, Akina.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MS SQL Server | Следующая тема »


 




[ Время генерации скрипта: 0.0474 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.