2013-12-05 4 views
3

Как импортировать файл .dbf в SQL Server с помощью SQL-скрипта?импортировать DBF-файл в SQL Server с помощью SQL-скрипта

Найдено ответов от этой должности, но, к сожалению, ни один из них не работает для меня :(:

Когда я пытаюсь этот код:

SELECT * 
INTO [APP_DB]..[BILLHEAD] 
FROM OPENROWSET('MSDASQL', 'Driver=Microsoft Visual FoxPro Driver; SourceDB=D:\DBF; SourceType=DBF', 'SELECT * FROM BILLHEAD') 

Я получаю эту ошибку:

OLE DB provider "MSDASQL" for linked server "(null)" returned message "[Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified". Msg 7303, Level 16, State 1, Line 1 Cannot initialize the data source object of OLE DB provider "MSDASQL" for linked server "(null)".

А также, при попытке это:

SELECT * 
FROM openrowset('VFPOLEDB','D:\DBF\BILLHEAD.dbf';''; 
       '','SELECT * FROM BILLHEAD') 

Я получаю эту ошибку:

Msg 7438, Level 16, State 1, Line 1
The 32-bit OLE DB provider "VFPOLEDB" cannot be loaded in-process on a 64-bit SQL Server.

Я не хочу, чтобы загрузить приложения сторонних производителей. Вот почему я пытаюсь найти все возможное решение, и теперь мне нужна ваша помощь, ребята. Я создаю небольшое приложение для импорта файлов .DBF в SQL Server.

С уважением,

+0

Вы должны начать с основ. Используйте эту ссылку, чтобы открыть администратора ODBC. http://windows.microsoft.com/en-au/windows7/using-the-odbc-data-source-administrator. Теперь создайте системный DSN для подключения к вашему файлу DBF - это работает? –

+0

Это одноразовый или повторяющийся импорт данных? – Eccountable

+0

Хороший вопрос. У меня такая же проблема. @Nick, я попробовал добавить системную DSN, но A) Я и люди, использующие сценарий, который я пытаюсь создать, не имеют прав администратора, и B) для этого потребуется, чтобы каждый пользователь скрипта добавлял драйвер и настраивал система DSN, которая выходит за рамки понимания многих из них. Любые идеи или указатели были бы оценены вдвойне, ребята (и дамы). – cfwschmidt

ответ

1

Вы используете 64-разрядную SQL Sever, но драйвер FoxPro OLE DB является 32-бит. Вам необходимо обратиться к this article, в котором обсуждается, как использовать 32-разрядный драйвер OLE DB с 64-разрядным SQL Server.

0

Gimo, я не уверен, что это сработает, и я не эксперт MS SQL Server, но в последнее время я борюсь с подобной проблемой, и у меня есть идея. Я думаю, что вы можете быть в состоянии получить, что первый блок кода из вашего вопроса, чтобы работать, если выполнить следующие операторы первым:

EXEC sp_configure 'show advanced options', 1 RECONFIGURE; GO
EXEC sp_configure 'Ad Hoc Distributed Queries', 1 RECONFIGURE; GO

Это может не работать, если у вас нет соответствующих прав (что произошло в моей ситуации), но это может стоить того.

0

Наш офис, гуру SQL/GIS, Burce, решил аналогичную проблему, с которой я столкнулся. Я не уверен во всех подробностях о том, как он это сделал, поэтому, хотя я не хочу вводить это как «Ответ» (слишком много символов для ввода в качестве комментария), я опишу, что могу, если это произойдет полезен для всех. Сначала имейте в виду, что он имеет полные разрешения на SQL Server, поэтому это решение может оказаться невозможным для всех пользователей БД. Брюс создал связанный сервер, подключенный к каталогу «.../DBF /» на нашем файловом сервере LAN. Он также создал аналогичный каталог Linked Server & для файлов CSV. Любой пользователь нашего офиса может просто скопировать DBF-файл в этот каталог, а затем получить доступ к нему в SQL Server, как если бы он был обычной таблицей в базе данных SQL Server. Я обращаюсь к этому в SSMS, подключившись к Database Engine, затем перейду в «Объекты сервера»> «Связанные серверы»> «DBF»> Каталоги> по умолчанию> Таблицы>имя файла.Свойства связанного сервера сказать следующее:

Из вкладке Общие окна Свойства enter image description here

Из вкладке Безопасность окна свойств enter image description here

На вкладке Параметры сервера в окне Свойства enter image description here

Обратите внимание, что это может быть или не быть безопасной конфигурацией для всех сред сервера баз данных, но это находится на SQL Server, который находится в нашей внутренней сети, доступен только в нашем офисе без каких-либо конечных точек или доступа за пределами нашей локальной сети (это не используется как сервер для Интернета или других интернет-сервисов).

0

У меня были подобные проблемы, где вещи просто не работал, пытаясь переместить устаревшие таблицы из VFP в SQL 2008R2 и использовали следующую процедуру:

  1. выберите таблицу в VFP
  2. копию blahblah XL5
  3. Шаг 2 приводит к файлу Excel
  4. Используйте SQL 2008 R2 или выше «Импорт и экспорт данных (32 бит)» для импорта файла excel.
  5. Я работал под управлением Windows 7 64 бит и все еще должен был использовать 32-битный импорт, чтобы он работал плавно.

Это может объяснить, почему вам нужен 32 битную Импорт: https://msdn.microsoft.com/en-us/library/ms141209.aspx