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

Откуда: Санкт-Петербург - New York City
Сообщений: 5072
Добрый день коллеги

Проблема: необходимо импортировать данные из Excel 2003 в MSSQL2000. При этом формат данных не задан жёстко: количество столбцов на странице Excel не фиксировано (при импорте я паршу имена и раскладываю по таблицам). Всё работает отлично:

SELECT * INTO #Loader FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0', 'Excel 8.0;IMEX=1;Database=C:\Book1.xls', Sheet1$);

Теперь требуется сделать имя Excel файла параметром. Ума не приложу, как этого добиться – динамический SQL не помогает, ибо временная таблица #Loader будет не видна после выполнения этого динамического SQL.

С уважением,
Мартин Рахманов
http://jimmers.russia.webmatrixhosting.net/
20 апр 05, 12:05    [1481960]     Ответить | Цитировать Сообщить модератору
 Re: Параметризовать OPENROWSET для импорта из Excel (сложно)  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
DTS?
20 апр 05, 12:18    [1482018]     Ответить | Цитировать Сообщить модератору
 Re: Параметризовать OPENROWSET для импорта из Excel (сложно)  [new]
jimmers
Member

Откуда: Санкт-Петербург - New York City
Сообщений: 5072
А как именно DTS может помочь? Параметризовать имена и получить во временной таблице данные, доступные для последующей обработки.

С уважением,
Мартин Рахманов
http://jimmers.russia.webmatrixhosting.net/
20 апр 05, 12:24    [1482058]     Ответить | Цитировать Сообщить модератору
 Re: Параметризовать OPENROWSET для импорта из Excel (сложно)  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
Хотя, можно и динамикой обойтись - использовать вместо временных таблиц постоянные с уникальным именем, после обработки грохать их явно.
20 апр 05, 12:32    [1482104]     Ответить | Цитировать Сообщить модератору
 Re: Параметризовать OPENROWSET для импорта из Excel (сложно)  [new]
прохожий мимо
Guest
1.слить имена в таблицу и DTS их от туда возьмет
2.переименовывать файл(ы) до OPENROWSET
20 апр 05, 12:33    [1482107]     Ответить | Цитировать Сообщить модератору
 Re: Параметризовать OPENROWSET для импорта из Excel (сложно)  [new]
Веселов Константин
Member

Откуда: Новосибирск
Сообщений: 208
Может помочь такой алгоритм:
1. Один раз подключаем linked server: EXEC sp_addlinkedserver '(local)'
2. Делаем SP без параметров. Параметр - имя файла, в этой SP достается из глобальной временной таблицы, после чего она через динамический SQL вовзрашает выборку из экселя.
3. Создаем глобальную временную таблицу и ложим туда имя файла
4. Пишем дальше так SELECT * INTO #Loader FROM OPENQUERY([(local)], 'EXEC spName')
20 апр 05, 12:38    [1482144]     Ответить | Цитировать Сообщить модератору
 Re: Параметризовать OPENROWSET для импорта из Excel (сложно)  [new]
jimmers
Member

Откуда: Санкт-Петербург - New York City
Сообщений: 5072
2tpg

Пока что я так и делаю - через постоянную таблицу. Имя не уникальное, благо импорт гарантированно не запускается параллельно (ночной job), а при уникальных именах все запросы к такой таблице придётся делать динамическими. Но это жутко топорно.

2прохожий мимо

1. Как именно возьмёт-то? И потом – как дальше быть? Мне требуется таблица, которая будет обработана далее.
2. Не годится, ибо путь к файлу может меняться из конфиг. файла.

2Веселов Константин

Отличный вариант!

Спасибо всем



С уважением,
Мартин Рахманов
http://jimmers.russia.webmatrixhosting.net/
20 апр 05, 13:07    [1482319]     Ответить | Цитировать Сообщить модератору
 Re: Параметризовать OPENROWSET для импорта из Excel (сложно)  [new]
Веселов Константин
Member

Откуда: Новосибирск
Сообщений: 208
Вот еще лучше вариант:
DECLARE @FileName VARCHAR(256);
SET @FileName = 'C:\Book1.xls';
EXEC('SELECT * INTO ##Loader FROM OPENROWSET(''Microsoft.Jet.OLEDB.4.0'', ''Excel 8.0;IMEX=1;Database=' + @FileName + ''', Sheet1$);');
SELECT * FROM ##Loader
20 апр 05, 13:19    [1482388]     Ответить | Цитировать Сообщить модератору
 Re: Параметризовать OPENROWSET для импорта из Excel (сложно)  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
jimmers
2tpg

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

Ну, а sp_rename заюзать?
20 апр 05, 13:20    [1482395]     Ответить | Цитировать Сообщить модератору
 Re: Параметризовать OPENROWSET для импорта из Excel (сложно)  [new]
jimmers
Member

Откуда: Санкт-Петербург - New York City
Сообщений: 5072
А что именно с sp_rename?

С уважением,
Мартин Рахманов
http://jimmers.russia.webmatrixhosting.net/
20 апр 05, 13:43    [1482532]     Ответить | Цитировать Сообщить модератору
 Re: Параметризовать OPENROWSET для импорта из Excel (сложно)  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
jimmers
А что именно с sp_rename?

С уважением,
Мартин Рахманов
http://jimmers.russia.webmatrixhosting.net/

Я имел в виду - переименование постоянных таблиц с уникальным именем в таблицу с "рабочим", предварительно грохнув оную.
20 апр 05, 13:45    [1482544]     Ответить | Цитировать Сообщить модератору
 Re: Параметризовать OPENROWSET для импорта из Excel (сложно)  [new]
jimmers
Member

Откуда: Санкт-Петербург - New York City
Сообщений: 5072
Остановился на варианте с глобальной временной таблицей.

С уважением,
Мартин Рахманов
http://jimmers.russia.webmatrixhosting.net/
20 апр 05, 13:50    [1482576]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: Параметризовать OPENROWSET для импорта из Excel (сложно)  [new]
vhomka
Member

Откуда:
Сообщений: 6
Веселов Константин,
у меня такая же задача, только нужно ещё два параметра: путь до файла и имя файла=имени листа в Excel. имя файла должно задаваться пользователем. сейчас попробовала так написать.. всё хорошо, но нужно чтобы имя файла спрашивалось перед началом процедуры. подскажите как сделать.
24 июн 11, 08:45    [10866476]     Ответить | Цитировать Сообщить модератору
 Re: Параметризовать OPENROWSET для импорта из Excel (сложно)  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
vhomka
Веселов Константин,
у меня такая же задача, только нужно ещё два параметра: путь до файла и имя файла=имени листа в Excel. имя файла должно задаваться пользователем. сейчас попробовала так написать.. всё хорошо, но нужно чтобы имя файла спрашивалось перед началом процедуры. подскажите как сделать.
Например, использовать динамику.
24 июн 11, 08:56    [10866498]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить