Hallo All,
Помогите, пожалуйста, определить наилучшую процедуру для следующей проблемы.
В пользовательском интерфейсе есть положение для загрузки файла 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$]')
После загрузкиуспешно, я использую логику и удаляю все ненужные записи .. наконец я получу набор записей, которые я перемещу в соответствующие таблицы.Наконец, я УДАЛИТЬ временную таблицу, которую я использовал для загрузки.Здесь # temp.
Эта процедура имеет много проблем.Поскольку структура #temp не всегда совпадает с тем, что Excel предполагает тип данных этого конкретного поля на основе анализа данных, которые он имеет в первых n записях.Иногда для определенного поля предполагается тип данных nvarchar (255) и несколько раз текст.Так мало функций выдают сообщение об ошибке в этих конкретных полях при выполнении хранимой процедурыполе в таблице #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 ...
РЕДАКТИРОВАТЬ В ЗАПРОСЕ: -
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, поэтому сообщение об ошибке - " Ошибка арифметического переполнения при преобразовании выражения в типе данных datetime. Оператор был прекращен ."
Если я удаляю записи с датой 00.00.0000, то это исправно.Но я не могу делать это вручную каждый раз.Теперь мне нужно найти способ обойти эту проблему.
большое спасибо за ваше терпение при чтении такой длинной почты ... Я действительно не знаю, правильная ли процедура, которую я использую, или нет.Я просто изменяю код для устранения ошибок ...
Пожалуйста, предложите мне соответствующую процедуру для такого рода требований.