Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
Топик располагается на нескольких страницах: [1] 2 вперед Ctrl→ все |
Beginners Member Откуда: Сообщений: 9 |
Всем здравствуйте! У нас небольшая организация. Не можем нанять админа. Все делаю сам. Сейчас стоит задача по сбору данных на еженедельной основе. Есть идея реализовать таким образом: Данные в dbf файлах выкладывают на наш портал ftp. SQL server берет эти данные и схлопывает в таблицу. Еженедельно выкладывают около 10000 "легких" файлов. Файлы нам обещали выкладывать стандартезированные по полям и их форматам. Кто то решал подобные задачи? Что можете посоветовать? Интересует в плане подобных скриптов по забору данных с ftp (запаролен вход к слову тк внешние организации). Сам впервые работаю с подобной задачей. Если можно истолкуйте все как для нуба) огромное спасибо за участие!!! Если есть предложения как настроить проще процесс - буду только благодарен. |
20 сен 15, 12:54 [18172026] Ответить | Цитировать Сообщить модератору |
Knyazev Alexey Member Откуда: Екб -> Мск Сообщений: 10232 Блог |
https://www.mssqltips.com/sqlservertip/2884/sql-server-integration-services-ssis-ftp-task-for-data-exchange/ |
20 сен 15, 14:18 [18172178] Ответить | Цитировать Сообщить модератору |
Сид Member Откуда: Москва Сообщений: 305 |
Beginners, По-моему, лучше формат сменить на CSV, если это возможно. Dbf - динозавр, с которым придется трахаться на x64. Даже если сейчас вдруг x32, перспектива не в пользу dbf. По поводу организации доступа, думаю, лучше в качестве сетевого диска настроить (с сохранением логина-пароля) и обеспечить доступ службе mssql agent (там свой пользователь, но настроить можно хоть на админа).А дальше читаем про xp_cmdshell, вспоминаем про команду dir для получения списка файлов в папке и дальше поштучно загружаем в базу. Про чтение csv welcome в поиск по форуму. Если вдруг, как это иногда бывает, сетевой диск будет самопроизвольно отключаться, можно его пересоздавать из командной строки (тот же xp_cmdshell в помощь). Даже если он при этом работает, ничего страшного не случится. |
20 сен 15, 15:21 [18172319] Ответить | Цитировать Сообщить модератору |
churupaha Member Откуда: Краснодар Сообщений: 1015 |
select @@version; go select * from openrowset ( 'Microsoft.ACE.OLEDB.12.0', 'dBASE IV;Database=C:\temp\fias\', 'SELECT * FROM STRSTAT.DBF' ) go ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Microsoft SQL Server 2014 - 12.0.4100.1 (X64) Apr 20 2015 17:29:27 Copyright (c) Microsoft Corporation Enterprise Edition (64-bit) on Windows NT 6.3 <X64> (Build 9600: ) (Hypervisor) (1 row(s) affected) STRSTATID NAME SHORTNAME ---------------------- -------------------- -------------------- 0 Не определено NULL 1 Строение стр 2 Сооружение сооружение 3 Литер литер (4 row(s) affected) |
||
20 сен 15, 16:29 [18172471] Ответить | Цитировать Сообщить модератору |
alexeyvg Member Откуда: Moscow Сообщений: 31785 |
Не то, что с dbf работать невозможно, но всё таки будет менее удобно, чем с csv или xml (для сложных структур) |
||
20 сен 15, 19:06 [18172754] Ответить | Цитировать Сообщить модератору |
Сид Member Откуда: Москва Сообщений: 305 |
про возможность смены формата я просто решил учесть тех, кто, собственно, скидывает файлы. Мы ж не знаем, откуда они берутся, может быть dbf - единственный возможный (или приемлемый по срокам, деньгам и т.д.) вариант. А если всё равно - CSV. В данном конкретном случае XML большого смысла не имеет, если, конечно, там не 100+ колонок (когда в случае ошибки убьёшься искать, в чём дело). Если действительно файлы широкие, я бы присмотрелся к варианту с XML, чтобы потом было проще поддерживать и отслеживать возможные ошибки. Ибо "Файлы нам обещали выкладывать стандартизированные по полям и их форматам" ещё не на 100% означает, что они на самом деле такими окажутся. |
20 сен 15, 21:32 [18173004] Ответить | Цитировать Сообщить модератору |
alexeyvg Member Откуда: Moscow Сообщений: 31785 |
|
||||
21 сен 15, 10:06 [18173819] Ответить | Цитировать Сообщить модератору |
Beginners Member Откуда: Сообщений: 9 |
Всем большое спасибо за советы. Файлы не широкие и не длинные :) буквально 30 строк и 5 столбцов. и работать можем пока только с dbf. Можете поподробнее описать процесс пофайловой загрузки? Я упираюсь в то, что у меня вылетают, такие ошибки: У меня в "Связанные серверы" - "Поставщики" нет Microsoft.ACE.OLEDB.12.0. Есть только MSDASQL. Пытаюсь работать через него. Пишу скрипт:
Возникает ошибка:
Играл с параметрами, но ничего не выходит. Гуглил, но видимо слишком слаб в SQL Server и не понимаю, как это поправить :( Через exec xp_fileexist 'C:\f130.dbf' файл вижу. Может кто-то подкинет пошаговую инструкцию для совсем нуба?.. Пока пытаюсь хотя бы с диска загрузить, что бы потом на ftp перенести... |
||
21 сен 15, 18:00 [18177122] Ответить | Цитировать Сообщить модератору |
Beginners Member Откуда: Сообщений: 9 |
Версия SQL Server 2008: Microsoft SQL Server Management Studio 10.50.1600.1 |
21 сен 15, 18:02 [18177143] Ответить | Цитировать Сообщить модератору |
alexeyvg Member Откуда: Moscow Сообщений: 31785 |
Если такой, что нужен Microsoft.ACE.OLEDB.12.0, то нужно его поставить, "обойтись без него" не получится. |
||
21 сен 15, 19:08 [18177439] Ответить | Цитировать Сообщить модератору |
alexeyvg Member Откуда: Moscow Сообщений: 31785 |
|
||
21 сен 15, 19:08 [18177442] Ответить | Цитировать Сообщить модератору |
Сид Member Откуда: Москва Сообщений: 305 |
вот примерно такую ситуацию я предполагал под словом "трахаться" :)select @@version? Далее слово churupaha как эксперта, который может поделиться собственным опытом. |
21 сен 15, 23:29 [18178192] Ответить | Цитировать Сообщить модератору |
Beginners Member Откуда: Сообщений: 9 |
Извиняюсь, вчера руки не дошли ответить: Microsoft SQL Server 2008 R2 (RTM) - 10.50.1600.1 (X64) Apr 2 2010 15:48:46 Copyright (c) Microsoft Corporation Data Center Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1) |
22 сен 15, 09:41 [18178844] Ответить | Цитировать Сообщить модератору |
alexeyvg Member Откуда: Moscow Сообщений: 31785 |
|
||
22 сен 15, 10:08 [18178993] Ответить | Цитировать Сообщить модератору |
zero_air Member Откуда: Сообщений: 53 |
Beginners, Если в провайдерах на х64 нет Microsoft.ACE.OLEDB.12.0 нужно скачать и поставить Microsoft Data Access Components https://www.microsoft.com/ru-ru/download/details.aspx?id=5793 |
22 сен 15, 10:56 [18179244] Ответить | Цитировать Сообщить модератору |
Beginners Member Откуда: Сообщений: 9 |
Установил Microsoft.ACE.OLEDB.12.0. С компьютера я могу забрать файл. Но с ftp не понимаю как организовать подачу. Обязательно ли наличие Business Intelligence Development Studio? Пробовал действовать через мастера импорта и экспорта, выбирая источник данных Microsoft Office 12.0 Access Database Enginine OLE DB Provider , в свойствах вводя логин, пароль, нажимая Проверить соединение получал ошибку: не выполнена проверка соединения из-за ошибки при инициализации поставщика, cannot start your application, the workgroup information file is missing or opened exclusively by another user. Можете, пожалуйста, пподсказать, как мне поступить? |
22 сен 15, 16:00 [18181143] Ответить | Цитировать Сообщить модератору |
zero_air Member Откуда: Сообщений: 53 |
Beginners, Ну так вышло что MS SQL ничего не знает про FTP поэтому сделайте таск в шедуреле и "подавайте" файлы с локальной папки на сервер. |
22 сен 15, 16:09 [18181178] Ответить | Цитировать Сообщить модератору |
Beginners Member Откуда: Сообщений: 9 |
Итого: у меня получилось настроить на "забор" всех файлов с ftp на мой компьютер, оттуда я смог брать файлы без проблем, но по одному. Не получается понять как написать скрипт\цикл на то, что бы SQL Server с каждого файла поочередно брал строки и "вкладывал" в таблицу... Может кто то подбросить подобный скрипт? Извиняюсь, за такие глупые вопросы, я первый раз столкнулся с SQL Server....огромное спасибо за помощь!!! |
5 окт 15, 15:07 [18236703] Ответить | Цитировать Сообщить модератору |
Beginners Member Откуда: Сообщений: 9 |
К примеру, вот пытаюсь, через курсор, но не выходит тк файлы называются как говориться "Бог на душу положит" 234_666, 345_01oct15 и т.д. А переменную объявить как текст нельзя. Есть идеи как можно по-другому оформить запрос? declare F cursor for SELECT fname FROM dir declare @file text open F fetch next from F into @file while @@FETCH_STATUS = 0 begin DECLARE @cmd varchar(8000) SET @cmd = 'insert [5_302000] select * from openrowset ( ''Microsoft.ACE.OLEDB.12.0'', ''dBASE IV;Database=C:\temp\'', ''SELECT * FROM @fname'' )' EXEC(@cmd) fetch next from F into @file end close F deallocate F |
5 окт 15, 18:07 [18237697] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104751 |
SET @cmd = 'insert [5_302000] select * from openrowset ( ''Microsoft.ACE.OLEDB.12.0'', ''dBASE IV;Database=C:\temp\'', ''SELECT * FROM '+@file+''' )' |
5 окт 15, 20:37 [18238211] Ответить | Цитировать Сообщить модератору |
Beginners Member Откуда: Сообщений: 9 |
Огромное спасибо, Glory!!! Работает! А можете еще помочь, есть ли ограничения на название файлов или еще что-то? Один из файлов не "берется". Вылезет ошибка:
Поставщик OLE DB "Microsoft.ACE.OLEDB.12.0" для связанного сервера "(null)" вернул сообщение "The Microsoft Access database engine could not find the object 'f130_01102015_302000'. Make sure the object exists and that you spell its name and the path name correctly. If 'f130_01102015_302000' is not a local object, check your network connection or contact the server administrator.". Сообщение 7350, уровень 16, состояние 2, строка 1 Не удалось получить сведения о столбце от поставщика OLE DB "Microsoft.ACE.OLEDB.12.0" для связанного сервера "(null)".
Файл есть. Наименование такое. И я его могу открыть. Я его вижу в т.ч. через exec xp_cmdshell 'dir /b c:\temp\*.dbf'.... |
||
6 окт 15, 09:24 [18239374] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104751 |
Потому что имя слишком длинное. Больше 8 символов |
||
6 окт 15, 09:26 [18239386] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104751 |
И вообще бы лучше взяли бы SSIS и сделали Foreach Loop Container Foreach File enumerator to enumerate files in a folder. The enumerator can traverse subfolders. For example, you can read all the files that have the *.log file name extension in the Windows folder and its subfolders. |
6 окт 15, 09:30 [18239413] Ответить | Цитировать Сообщить модератору |
Beginners Member Откуда: Сообщений: 9 |
Дело в том, что попробовал SISS, но не понял где прописать что файлы нужно перебирать по очереди. У меня получилось в "Цикле по каждому элементу" перебираются все наименования, но "Задача потока данных", где источник данных "ODCB", предлагается выбрать 1 конкретный файл, тем самым я вношу 1 этот файл в свою таблицу столько раз, сколько в "Цикл по каждому элементу" перебрано элементов... |
6 окт 15, 10:10 [18239621] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104751 |
Имя файла должно браться из текущей итерации цикла. А не задаваться вручную |
||
6 окт 15, 10:12 [18239634] Ответить | Цитировать Сообщить модератору |
Топик располагается на нескольких страницах: [1] 2 вперед Ctrl→ все |
Все форумы / Microsoft SQL Server | ![]() |