Импортируйте столбцы электронной таблицы Excel в базу данных SQL Server

Неустранимая ошибка: допустимый размер памяти из XXX байт исчерпан (пытался выделить XXX байты)

Недостаточно памяти для запуска вашего скрипта. PHP достиг предела памяти и перестает его выполнять. Эта ошибка является фатальной, сценарий останавливается. Значение предела памяти можно настроить либо в файле php.ini, либо с помощью ini_set('memory_limit', '128 M'); в скрипте (который перезапишет значение, определенное в php.ini). Цель ограничения памяти заключается в том, чтобы не допустить, чтобы один скрипт PHP собирал всю доступную память и приводил к остановке всего веб-сервера.

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

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

Вопросы, относящиеся:

63
задан user2771704 30 September 2014 в 07:33
поделиться

7 ответов

Мастер импорта действительно предлагает ту опцию. Можно или использовать опцию записать собственный запрос для данных для импорта, или можно использовать опцию данных копии и использовать кнопку "Edit Mappings" для игнорирования столбцов, которые Вы не хотите импортировать.

0
ответ дан DCNYAM 24 November 2019 в 16:21
поделиться

'Человеком выдающихся способностей' я предполагаю, что Вы говорите о 'Импорте SQL Server и Мастере Экспорта'. (Я являюсь также довольно новым, таким образом, я не понимаю большинства вопросов, а тем более большинства ответов, но я думаю, что получаю этого). Раз так разве Вы не могли взять электронную таблицу или копию ее, удалить столбцы, Вы не хотите импортированный и затем используете мастер?

я всегда находил способность сделать то, в чем я нуждаюсь с нею, и я нахожусь только на SQL Server 2000 (не уверенный, как другие версии отличаются).

Редактирование: На самом деле я смотрю на него теперь, и я, кажется, могу выбрать, какие столбцы я хочу отобразить на который строки в существующей таблице. На экране 'Select Source Tables and Views' я проверяю таблицу данных, я использую, выбираю 'Место назначения', затем нажимают кнопку 'Edit...'. Оттуда можно выбрать столбец Excel и столбец таблицы для отображения его на.

3
ответ дан Jeff Keslinke 24 November 2019 в 16:21
поделиться

Вы могли использовать OpenRowset, что-то как:

SELECT * FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0', 
  'Excel 8.0;IMEX=1;HDR=NO;DATABASE=C:\FILE.xls', 'Select * from [Sheet1$]'

Просто удостоверяются, что путь является путем на сервере, не Вашей локальной машине.

7
ответ дан SqlACID 24 November 2019 в 16:21
поделиться

Это может походить на длинный путь вокруг, но можно хотеть посмотреть на использование , Excel для генерации ВСТАВЛЯЕТ код SQL, что Вы можете мимо в Query Analyzer для составления таблицы.

Работы хорошо, если Вы наклоняетесь, используют мастера, потому что файл Excel не находится на сервере

12
ответ дан Nick Kavadias 24 November 2019 в 16:21
поделиться

Microsoft предлагают несколько методов:

  • Службы преобразования данных (DTS) SQL Server
  • Microsoft SQL Server 2 005 Услуг по интеграции (SSIS)
  • связанные серверы SQL Server
  • распределенные запросы SQL Server
  • ActiveX Data Objects (ADO) и Microsoft OLE DB Provider для SQL Server
  • ADO и Microsoft OLE DB Provider для Jet 4.0

, Если мастер (DTS) не работает (и я думаю, что это должно) Вы могли бы попробовать что-то вроде этого http://www.devasp.net/net/articles/display/771.html , который в основном предлагает делать что-то как [1 110]

INSERT INTO [tblTemp] ([Column1], [Column2], [Column3], [Column4])

SELECT A.[Column1], A.[Column2], A.[Column3], A.[Column4]
FROM OPENROWSET 
('Microsoft.Jet.OLEDB.4.0', 'Excel 8.0;Database=D:\Excel.xls;HDR=YES', 'select * from [Sheet1$]') AS A;
25
ответ дан inspite 24 November 2019 в 16:21
поделиться

Microsoft Access - еще один вариант. У вас может быть база данных Access локально на вашем компьютере, в которую вы импортируете электронные таблицы Excel (доступны мастера) и связываете с таблицами базы данных SQL Server через ODBC .

Затем вы можете разработать запрос в доступе, который добавляет данные из электронной таблицы Excel в таблицы SQL Server.

2
ответ дан 24 November 2019 в 16:21
поделиться

После подключения к базе данных Sql Server 2005, в окне обозревателя объектов щелкните правой кнопкой мыши базу данных, которую вы хотите импортировать таблица в. Выберите Задачи -> Импорт данных. Это простой инструмент, который позволяет «отображать» входящие данные в соответствующую таблицу. Вы можете сохранить сценарии для повторного запуска при необходимости.

50
ответ дан 24 November 2019 в 16:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: