Hallo All,Процедура загрузки excel в sql-сервер
Пожалуйста, помогите определить оптимальную процедуру для следующей проблемы.
В пользовательском интерфейсе есть условие для загрузки файла excel. Это делается администратором один раз/два раза в день на регулярной основе.
Код, который я использовал для загрузки файла excel в sql-сервер.
select *
into #temp FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0',
'Excel 8.0;Database=D:\Files\29.09.10\working_290910.xls;HDR=YES;IMEX=1',
'SELECT * FROM [2XX$]')
Как только загрузка прошла успешно, я использую логику и удаление всех ненужных records..finally я получит набор записей, которые я перенести в соответствующие таблицы. Наконец, я удалю таблицу temp, которую я использовал для загрузки. Здесь #temp.
Эта процедура имеет много проблем. Поскольку структура #temp не всегда такая же, как excel, предполагается, что тип данных этого конкретного поля основан на анализе данных, которые он имеет в первых n записях. Для определенного поля иногда он предполагает, что тип данных как nvarchar (255) и несколько раз текст. Таким образом, несколько функций выдают сообщение об ошибке в этих конкретных полях при выполнении хранимой процедуры.
В прошлый раз, когда у меня была аналогичная проблема, LTRIM не работает над текстовым полем .. Поскольку excel предположил тип данных для поля в таблица #temp как текст ..
так я изменил код таким образом, создавая таблицу,
CREATE TABLE temp_invoice(
[Concession Number] varchar(30),
[Status] char(10),
[Sort] char(10),
[Task code text] varchar(60),
[Task resp#] varchar(10),
[Person who complete the task] varchar(50),
[Completed] datetime
)
, так что я могу исправить типы данных, а затем переместить данные из Excel ...
EDIT IN QUERY: -
insert into temp(Completed)
SELECT CASE Completed when '00.00.0000' THEN null else Completed END
FROM OPENROWSET
('Microsoft.Jet.OLEDB.4.0', 'Excel 8.0;Database=D:\Files\12.10.10\MC01_PCTA00012_20101012.xls;HDR=YES;IMEX=1', 'select * from [Tabelle1$]') AS A;
Теперь у меня есть сообщение об ошибке на основе данных. Если в первых нескольких строках заполненное поле имеет '00 .00.000 '. Тогда его рабочий штраф. Если он не имеет значения в первых нескольких строках, он выдает сообщение об ошибке.
Теперь в моем Excel файл данных для поля [Завершено] является 00.00.0000, поэтому сообщение об ошибке «преобразование выражения Ошибки арифметического переполнения в типе данных даты и времени. Заявление было прекращено.»
Если я удалю записи с датой 00.00.0000, тогда ее работа хорошая. Но я не могу маневрировать каждый раз. Теперь мне нужно найти работу вокруг этой проблемы.
благодарит за ваше терпение при чтении такой длинной почты .. Я действительно не знаю, правильно ли я использую процедуру, которую я использую. Я просто меняю код, чтобы преодолеть ошибки ...
Просьба предложить мне подходящую процедуру для этого типа требований.
Спасибо за ур ответ. Но мне нужны записи с Завершено как 00.00.0000 .. Проблема в том, что его не принимающий формат даты и времени для 00.00.0000 – satya
Хорошо, что я обновил, но мне нужно подчеркнуть, что вы должны прочитать другое сообщение, чтобы полностью понять, что такое здесь, вместо того, чтобы просто обойти это. –
Решения, рассмотренные в упомянутой выше статье, выходят за рамки этого (включая внесение изменений в реестр, если вы так смелы). Решение 'CASE' работало для вас? –