2016-08-30 5 views
-1

У меня есть данные Excel, полученные от SQL Server, но я обновил сценарий SQL Server, поэтому мне нужно снова импортировать Excel в SQL Server. Я использовал task - данные импорта.Импорт файла Excel в SQL Server - есть проблемы с типом данных

Есть некоторые ошибки:

Копирование [DBO] [AA] (ошибка) сообщения.. Ошибка 0xc0202009: Поток данных Задача 1: Код ошибки SSIS DTS_E_OLEDBERROR. Ошибка OLE DB имеет . Код ошибки: 0x80004005. Доступна запись OLE DB. Источник: «Microsoft SQL Server Native Client 11.0» Hresult: 0x80004005 Описание: «Недопустимый формат даты». (SQL Server Импорт и экспорт Wizard)

0xc020901c Ошибка: Поток данных Задача 1: Был ошибка с назначения - AA.Inputs [Destination Input] .Columns [Время] на назначения - AA.Inputs [Destination Ввод]. Состояние столбца, возвращаемое , было: «Ошибка конверсии, потому что значение данных переполнило указанный тип ». (Мастер импорта и экспорта SQL Server)

Ошибка 0xc0209029: поток данных Задача 1: Код ошибки SSIS DTS_E_INDUCEDTRANSFORMFAILUREONERROR. «Destination - AA.Inputs [Destination Input]» не удалось, потому что произошел код ошибки 0xC020907A , а расположение строки ошибки в «Destination - AA.Inputs [Destination Input]» указывает на ошибку при ошибке. Произошла ошибка на указанном объекте указанного компонента. Там могут быть сообщения об ошибках, размещенные до этого, с дополнительной информацией о ошибке . (Мастер импорта и экспорта SQL Server)

Ошибка 0xc0047022: поток данных Задача 1: Код ошибки SSIS DTS_E_PROCESSINPUTFAILED. Метод ProcessInput на компоненте «Destination-AA» (107) не выполнен с кодом ошибки 0xC0209029, а обработчик ввода «Destination Input» (120). Выбранный компонент возвратил ошибку из метода ProcessInput. Ошибка специфична для , но ошибка является фатальной и приведет к прекращению работы задачи потока данных . Сообщения об ошибках могут быть отправлены до этого с дополнительной информацией об ошибке. (Импорт SQL Server и Мастер экспорта)

Я не знаю, есть ли у кого-либо предложения.

Поскольку файл Excel имеет ограниченный тип данных, i.e - тип float. Существует много типов данных, которые не сопоставляются с таблицей назначения SQL Server.

+0

У вас больше шансов получить помощь, если вы включите образец импортируемых данных, покажите, какие настройки вы использовали в мастере импорта, и укажите, что вы пытались разрешить отдельные ошибки. Вы определили, какая часть (-ы) данных является проблематичной? Возможно, попробуйте импортировать несколько строк и работать с определенными ошибками для этих строк. – SMM

ответ

1

Для обеспечения высокой производительности и преобразования типов данных управления:

1) Сохранить Excel в текстовый файл CSV, используя Save As.

2) Используйте следующий сценарий для импорта данных:

BULK 
INSERT mytable 
FROM 'path_to_csdv_file.csv' 
WITH 
(
    FIELDTERMINATOR = ';', 
    ROWTERMINATOR = '\n' 
) 

Вы можете использовать формат файла для описания данных для получения более подробной информации, обзор:

BULK INSERT

0

Это звучит как данные типы смещены. Я худший, что нужно сделать, это использовать мастер импорта, чтобы правильно настроить типы данных.

http://www.wiseowl.co.uk/blog/s231/schedule_data_import_in_sql_server_pt2.htm

После того, как у вас есть настройки типов данных правильно, выполните следующие действия: правой кнопкой мыши таблицу> Script Таблица As> Создать> Новая Query Editor Window. Теперь просто скопируйте/вставьте результаты в Excel. Заполните все типы данных для всех полей. Кроме того, сделайте следующее:

щелкните правой кнопкой мыши таблицу> Таблица скриптов как> Вставить в> Новое окно редактора запросов.

В конце концов, вы должны получить что-то вроде этого.

CREATE TABLE [dbo].[Something] 
(
    [Date] VARCHAR(MAX), 
    Change VARCHAR(MAX), 
    Index_Code VARCHAR(MAX), 
    Price_Return_Level VARCHAR(MAX) 
) 
    bulk insert dbo.GII_ICLstg 
    from 'C:\your_path_to_file.txt' 
    WITH 
    (
    FIRSTROW = 2, 
    FIELDTERMINATOR = ',', 
    ROWTERMINATOR = '\n' 
) 
    GO 
    INSERT INTO dbo.Something 
    SELECT 
     [Date] = CASE WHEN ISDATE([Date])=1 THEN CAST([Date] AS DATETIME) ELSE NULL END, 
     [Change], 
     Index_Code, 
     Price_Return_Level = CASE WHEN ISNUMERIC(Price_Return_Level) = 1 
    FROM dbo.Something 

Лично я считаю, что это самый простой способ сделать такие вещи.

Смежные вопросы