2016-09-28 1 views
1

Попытка выполнить массовую вставку в SQL 2014 Express, но получает сообщение об ошибке. Кажется, что процесс терпит неудачу при первом значении float таблицы, в которую он загружается.Массовая вставка сбой при первом поплавке

Я использую excel office 2013 и сохраняю как CSV с «,» delimitor. уже были удалены запятые с "_" перед обработкой Изменить мое расширение файла в формате TXT перед обработкой

Ошибка:

Msg 4864, Level 16, State 1, Line 1 
Bulk load data conversion error (type mismatch or invalid character for the specified codepage) for row 2, column 7 (NEW_PARTS_TERM). 

Пример файла Импорт:

ID,DEALER_NUM,DEALER_NAME,NEW_WARRANTY_SKU_NUM,NEW_WARRANTY_SKU_NAME,NEW_PARTS_TERM,EARNING_TYPE,PROGRAM_TYPE,PURCHDT,FAILDT,CLAIMCNT,TOTAL_LOSSES 
1,1060,Officemax,189400,OM 2YR ADH PREM SVC $450-$549.99 P,24.00,U,SERVICE,4/1/2015,8/1/2015,1.00,341.16 
2,1060,Officemax,189400,OM 2YR ADH PREM SVC $450-$549.99 P,24.00,U,SERVICE,4/1/2015,9/1/2015,1.00,181.16 

* Выполнение Хранимая процедура *

Exec [dbo].[BulkInsertFiles] 'Losses', 'C:\Users\hb\Desktop\FileUpload\', 'AllCNA_LossesDataThru_Aug-2016_Purch.txt' 

* хранимые процедуры Код *

ALTER PROCEDURE [dbo].[BulkInsertFiles] 
    -- Add the parameters for the stored procedure here 
     @INDEX nvarchar(20), 
     @PATH nvarchar(100), 
     @FILENAME nvarchar(50) 

AS 
BEGIN 
    -- SET NOCOUNT ON added to prevent extra result sets from 
    -- interfering with SELECT statements. 
    SET NOCOUNT ON; 

    -- Varaibles 
    DECLARE @FULLPath nvarchar(MAX) 
    DECLARE @QUERY nvarchar(MAX) 

    -- Insert statements for procedure here 
    SET @FULLPATH = '''' + @Path + @FILENAME +'''' 

    SET @QUERY = 'BULK INSERT ' + @Index + 
    ' FROM' + @FULLPATH + ' WITH 
    (
     FIRSTROW = 2, 
     FIELDTERMINATOR = '','', 
     ROWTERMINATOR = '''', 
     TABLOCK 
    )'; 
    --Print @query; 
    EXEC(@query); 

END 

* Таблица схемы *

CREATE TABLE [dbo].[Losses](
    [ID] [int] IDENTITY(1,1) NOT NULL, 
    [DEALER_NUM] [nvarchar](200) NULL, 
    [DEALER_NAME] [nvarchar](200) NULL, 
    [UNDERWRITER] [nvarchar](50) NULL, 
    [NEW_WARRANTY_SKU_NUM] [nvarchar](200) NULL, 
    [NEW_WARRANTY_SKU_NAME] [nvarchar](200) NULL, 
    [NEW_PARTS_TERM] [float] NULL, 
    [EARNING_TYPE] [nvarchar](50) NULL, 
    [PROGRAM_TYPE] [nvarchar](200) NULL, 
    [PURCHDT] [date] NULL, 
    [FAILDT] [date] NULL, 
    [CLAIMCNT] [float] NULL, 
    [TOTAL_LOSSES] [float] NULL, 
PRIMARY KEY CLUSTERED 
(
    [ID] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
) ON [PRIMARY] 

GO 
+0

У вашего файла есть заголовки? это может быть то, что он пытается прочитать заголовок и вставить его в столбец float. –

+0

в соответствии с Microsoft Атрибут FIRSTROW не предназначен для пропуска заголовков столбцов. Вывод заголовков не поддерживается инструкцией BULK INSERT. При пропуске строк SQL Server Database Engine смотрит только на терминаторы полей и не проверяет данные в полях пропущенных строк. –

+0

Я переключил все в таблице на varchar и решил проблему с плавающей точкой, но теперь он жалуется на последний столбец Total_Losses – HDB

ответ

0

Проблема с числом полей таблицы и данных, я соответствовал их и фиксированной мои данные.

Не нужно было удалять заголовок.

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