Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Очень надо - данные из Excel в 64bit  [new]
кто нибудь подскажет???
Guest
Требуется содержимое файла Excel перенести в таблицу БД.
СУБД : Microsoft SQL Server 2005 - 9.00.4220.00 (X64)

Поиск пользовал.
Как делал сам описал тут

Коллеги, подскажите, что не так.
Очень надо! :)
9 июн 09, 15:37    [7281586]     Ответить | Цитировать Сообщить модератору
 Re: Очень надо - данные из Excel в 64bit  [new]
Crimean
Member

Откуда:
Сообщений: 13148
метод рабочий, только зачем линкованый сервер поднимать динамически? раз его создать и все, пусть живет. ну и зачем "это" делать внутри транзакции?!! получить данные во временный объект ВНЕ транзакции, а потом в транзакции - обработать. не тащите ПОЛУЧЕНИЕ данных в транзакцию, тащите туда ОБРАБОТКУ
9 июн 09, 16:18    [7281880]     Ответить | Цитировать Сообщить модератору
 Re: Очень надо - данные из Excel в 64bit  [new]
кто нибудь подскажет???
Guest
Crimean
метод рабочий, только зачем линкованый сервер поднимать динамически? раз его создать и все, пусть живет. ну и зачем "это" делать внутри транзакции?!! получить данные во временный объект ВНЕ транзакции, а потом в транзакции - обработать. не тащите ПОЛУЧЕНИЕ данных в транзакцию, тащите туда ОБРАБОТКУ

Я написал, что динамический подъём линкованного сервера отваливается. Поэтому такой метод, как Вы справедливо указали, не подходит.
Раз его создать не получается - приходит файл с некоторым именем. Каждый раз разный. Через openrowset это проблемой не является. А вот как создать линкованный сервер для работы с Excel'ем так, чтобы обращаться к разным файлам я что-то не знаю.

То, что Вы предлагаете резонно, но сделать так не получится.
На клиенте открывается транзакция и выполняется действие. Так устроен движок. В данном случае действием является выполнение хранимки. Раньше в этой хранимке было select * from openrowset и все было хорошо. Теперь, с использованием связанных серверов появляются распределённые транзакции и аналогичная строка select * from openrowset на линкованном сервере уже не проходит, ошибку я привел.
Вот такая вот засада.
9 июн 09, 16:25    [7281934]     Ответить | Цитировать Сообщить модератору
 Re: Очень надо - данные из Excel в 64bit  [new]
Crimean
Member

Откуда:
Сообщений: 13148
совсем-совсем обходной способ, что быстро в голову пришло
импорт делает планировщик, из экселя в техническую таблицу
тут можно сделать все что угодно - нас никто ничем не ограничивает
клиент читает техническую таблицу вместо линкованого сервера
"все щасливы"

это если все просто. если все сложно клиент пишет параметры в техническую таблицу, инициирует процесс импорта и ждет результата. процесс импорта все равно делается внешним процессом после чего ставится флаг результата. клиент, получив сигнал, читает из технической таблицы результат импорта

короче, идеология "агентов" в полный рост. если не лениво - можно "брокера" задействовать, достаточно похоже, что для него задачка
9 июн 09, 17:35    [7282421]     Ответить | Цитировать Сообщить модератору
 Re: Очень надо - данные из Excel в 64bit  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
А чем SSIS не устраивает?
10 июн 09, 06:29    [7283762]     Ответить | Цитировать Сообщить модератору
 Re: Очень надо - данные из Excel в 64bit  [new]
кто нибудь подскажет???
Guest
tpg
А чем SSIS не устраивает?


выше написал
На клиенте открывается транзакция и выполняется действие. Так устроен движок. В данном случае действием является выполнение хранимки.

Вызвать SSIS пакет вряд ли получится, поскольку вызов этой ХП выполняется из другой ХП (обёртка) динамическим SQL, да ешё может осуществляться в цикле с разными входными параметрами. Если честно, не представляю как это SSISом можно сделать.
Да и SSIS, по-моему все равно будет использовать тот же Jet4.0, 64 битной версии которого нету.
10 июн 09, 09:21    [7283936]     Ответить | Цитировать Сообщить модератору
 Re: Очень надо - данные из Excel в 64bit  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 5111
ИМХО написать CLR процедуру и получать удовольствие...
--------------------------------------------------------------
Дьявол кроется в деталях.
10 июн 09, 09:34    [7283985]     Ответить | Цитировать Сообщить модератору
 Re: Очень надо - данные из Excel в 64bit  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
кто нибудь подскажет???
Да и SSIS, по-моему все равно будет использовать тот же Jet4.0, 64 битной версии которого нету.
Да - нету! Зато SSIS может прекрасно работать в 32-битном варианте для провайдеров типа Jet4.0. Да и логику ваших ХП можно лехко запихать в пакет и отказаться от них.

Сообщение было отредактировано: 10 июн 09, 09:40
10 июн 09, 09:40    [7284006]     Ответить | Цитировать Сообщить модератору
 Re: Очень надо - данные из Excel в 64bit  [new]
кто нибудь подскажет???
Guest
Дедушка
ИМХО написать CLR процедуру и получать удовольствие...

Может быть, опыта работы с CLR нет
10 июн 09, 10:15    [7284150]     Ответить | Цитировать Сообщить модератору
 Re: Очень надо - данные из Excel в 64bit  [new]
кто нибудь подскажет???
Guest
tpg
Да - нету! Зато SSIS может прекрасно работать в 32-битном варианте для провайдеров типа Jet4.0

Да, знаю, но я же не с клиента этот пакет буду выполнять.
tpg
Да и логику ваших ХП можно легко запихать в пакет и отказаться от них.

В файле Excel всего навсего данные, и то лишь часть, которая берется из внешней программы. Сомневаюсь, что напишу пакет, который будет строить нужные проводки с использованием данных из этого файла. :)

tpg, скажите, если не сложно, можно ли вызвать на выполнение SSIS пакет их хранимки ? Если можно - то что это будет - запуск внешнего процесса (например exec xp_cmdshell [сюда пакет]) или, если пакет сохранен на сервере, нечто вроде выполнения ХП? Во втором случае, если вызов будет в транзакции - откатятся ли изменения?
10 июн 09, 10:32    [7284245]     Ответить | Цитировать Сообщить модератору
 Re: Очень надо - данные из Excel в 64bit  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
ms-help://MS.SQLCC.v9/MS.SQLSVR.v9.ru/extran9/html/17146a50-32f0-4fbb-844f-bd33c8e4695e.htm
10 июн 09, 10:41    [7284298]     Ответить | Цитировать Сообщить модератору
 Re: Очень надо - данные из Excel в 64bit  [new]
кто нибудь подскажет???
Guest
tpg
ms-help://MS.SQLCC.v9/MS.SQLSVR.v9.ru/extran9/html/17146a50-32f0-4fbb-844f-bd33c8e4695e.htm

Спасибо, но чуть не то, хотя помогло найти то, что надо.
Ответ вроде тут
msdn
Пакеты можно запускать в среде Business Intelligence Development Studio, из мастера импорта и экспорта SQL Server, при помощи программ выполнения пакетов SQL Server 2005 Integration Services (SSIS), DTExec и DTExecUI или в шаге задания агента SQL Server.

Сейчас попробую с запуском пакета из ХП, правда разрешения пользователям несколько не радуют.
10 июн 09, 10:52    [7284371]     Ответить | Цитировать Сообщить модератору
 Re: Очень надо - данные из Excel в 64bit  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
кто нибудь подскажет???
tpg
ms-help://MS.SQLCC.v9/MS.SQLSVR.v9.ru/extran9/html/17146a50-32f0-4fbb-844f-bd33c8e4695e.htm

Спасибо, но чуть не то, хотя помогло найти то, что надо.
Ответ вроде тут
msdn
Пакеты можно запускать в среде Business Intelligence Development Studio, из мастера импорта и экспорта SQL Server, при помощи программ выполнения пакетов SQL Server 2005 Integration Services (SSIS), DTExec и DTExecUI или в шаге задания агента SQL Server.

Сейчас попробую с запуском пакета из ХП, правда разрешения пользователям несколько не радуют.
А по сему либо автомат (агент пинает пакет), либо самописный клиент, ИМХО.

Сообщение было отредактировано: 10 июн 09, 10:55
10 июн 09, 10:55    [7284394]     Ответить | Цитировать Сообщить модератору
 Re: Очень надо - данные из Excel в 64bit  [new]
кто нибудь подскажет???
Guest
Спасибо за советы.

В итоге реализовано :
1. в агенте выполняется запрос, который через линкованный сервер 32 битного инстанса забирает данные из Excel-файлов и кладет в постоянную таблицу БД, управляемой 64 битным сервером. Обращение к Excel заменено на обращение к этой таблице.

2. импорт из ряда других файлов реализован в другом приложении с последующей передачей в БД 64бит сервера.

Позже, думаю, изменю само решение по импорту данных.

В другой ветке дали совет
MsDatabaseru

было нечто похожее когда пытался выполнить в транзакции между тремя серверами
1 эксель,
2 32 экспресс
3 64 сам сервак
хотел запуская хранимку в экспрессе сразу положить на сервак - получал подобные ошибки.
если записывать в таблицу в самом экспрессе - без проблем.
в итоге сделал в экспрессе вьюшки к экселю а процедура которая тянет из них данные на основном серваке.
в вашем случае возможно имеет смысл созавать вьюшки программно

Спасибо, но я это делал подобное - не подходит.
Запускал на линкованном 32бит ХП, которая создавала view, после чего делал запрос уже к этой таблице.
Что плохо:
есть текст, который выполняется как
exec(@sql)
Так если сформировать текст @sql до того, как будет программно создана view, то запрос может отлететь с ошибкой, поскольку набор полей, возвращаемых этой view будет от раза к разу отличаться или такой view ещё не существует. Соответственно выполнение скрипта отлетит ещё на компиляции. Может и не отлететь, если view с такими полями уже есть.
17 июн 09, 17:16    [7311916]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить