2013-03-14 3 views
0

У меня есть большие файлы excel (около 10 МБ), содержащие 60000 строк данных. Я хотел бы импортировать все эти строки в базу данных SQL Server. Предполагая FilePath является C: \ file.xls, мой запрос будет:SQL Server Openrowset импортирует только 2000 строк из большого файла excel (.xls)

SELECT * INTO ImportedExcel FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0', 
'Excel 8.0;Database=C:\file.xls', 'SELECT * FROM [Sheet1$]') 

Процесс бежал хорошо, но только импортирован 2000 строк вместо 60000. Пожалуйста, помогите мне решить эту проблему. Благодарю.

+0

Проведено ли какое-либо исследование? Что получилось? – Jesse

+0

IIRC, это ограничение поставщика Jet при определенных обстоятельствах. – RBarryYoung

ответ

-1

Итак, процесс «прошел хорошо», но дал неправильный ответ и не сообщил об ошибке. Пора попробовать что-то еще, не так ли?

Возможно, это может быть сделано для работы. Возможно, есть некоторая настройка абракадабры, которая отключает ограничение строки. Если да, то кто-то здесь узнает. Мой совет - сойти с этого поезда, пока он не обманет вас.

Использование всего, что вам угодно - VBA, Perl, вручную - Excel выведет данные в файл с разделителями табуляции (желательно). «Сохранить как ...» довольно безопасно; Я не помню, как Excel сохранил часть листа в текстовый файл. Затем импортируйте файл с помощью BCP или BULK INSERT.

Первоначально это немного больше, но оно надежное и позволит вам следить за результатами незаменимой технологии.

0

Вот идея .. Почему бы не совершить каждые 500 транзакций?

Мы все знаем, что в Excel существует ограничение в 65530 записей, но я серьезно сомневаюсь, что вы попадаете в этот потолок.

DECLARE @SelCount INT 
-- Initialize the select count 
SET @SelCount = 0 
SET @SelCount = @SelCount + 1 

SELECT * INTO ImportedExcel FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0', 
'Excel 8.0;Database=C:\file.xls', 'SELECT * FROM [Sheet1$]') 

     -- Commit every 500 records and start a new transaction 
     IF @SelCount % 500 = 0 
     BEGIN 
      COMMIT TRANSACTION 
      BEGIN TRANSACTION 
     END 
    END 

IF @SelCount % 500 <> 0 
    BEGIN 
     COMMIT TRANSACTION 
    END 
GO