Проблемы с импортом CSV в таблицу

Я пытаюсь импортировать CSV-файл в таблицу, чтобы выполнить некоторые запросы. В конце концов, я буду автоматизировать это с помощью SSIS для ежедневного запуска. К сожалению, однако, я получаю сообщение об ошибке.

Я запустил данные импорта задачи. Затем выбрал мой плоский файл. В разделе «Дополнительно» я задал все типы на основе типов в БД (этот плоский файл заменит таблицу, поэтому типы должны быть одинаковыми). И я действительно проверял, что первая строка содержит имена столбцов.

Тип моего первого столбца в Int в БД, поэтому в источнике данных я попробовал DT_Numeric и DT_UI8. Однако, когда я делаю импорт, я получаю следующие ошибки:

Ошибка 0xc02020a1: Задача потока данных: сбой передачи данных. Преобразование данных для столбца «BLTO-NUM» «возвращаемое значение состояния 2 и текст состояния« Значение не может быть преобразовано из-за потенциальной потери данных ». (Мастер импорта и экспорта SQL Server)

Ошибка 0xc0209029: задача потока данных: код ошибки SSIS DTS_E_INDUCEDTRANSFORMFAILUREONERROR. «Выходной столбец» «BLTO-NUM» «(10)» не удался, потому что произошел код ошибки 0xC0209084, а расположение строки ошибки в «столбце вывода» «BLTO-NUM» «(10)» указывает на ошибку при ошибке. Произошла ошибка в указанном объекте указанного компонента. До этого могут появляться сообщения об ошибках с дополнительной информацией о сбое. (Мастер импорта и экспорта SQL Server)

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

Спасибо, Эрик

Сначала я бы привел данные в этап, а затем изменил типы данных с помощью простого оператора высказывания. Так, например, вы создаете таблицу с кучей полей varchar(100) . Это будет ваш этап назначения. Не самый эффективный, но он будет заселен на минуту. Затем выполните INSERT INTO с помощью SELECT в целевой целевой таблице. Это часть преобразования ETL. CAST все поля для типа данных и длины данных, описанных во второй целевой таблице

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

 INSERT INTO [Staging].[EDITestCaseData] ([FileID] ,[ImportRecordID] ,[TestCaseID] ,[TestID] ,[TransmissionID] ,[GroupID] ,[SetID] ,[LoopID] ,[FileType] ,[FilePopulation] ,[DataDescription] ,[InterchangeReceiverID] ,[InterchangeDate] ,[InterchangeTime] ,[InterchangeControlNumber] ,[ApplicationSendersCode] ,[ApplicationReceiversCode] ,[FunctionalGroupDate] ,[FunctionalGroupTime] ,[FunctionalGroupControlNumber] ,[TransactionSetControlNumber] ,[SegmentDate] ,[SegmentTime] ,[MaintenanceTypeCode] ,[MaintenanceReasonCode] ,[EmploymentStatuscode] ,[RecipientID] ,[Site] ,[CaseIDNumber] ,[MedicaidBegin] ,[MedicaidEnd] ,[RecipientLastName] ,[RecipientFirstName] ,[TelephoneNumber] ,[CorrectedRecipientLastName] ,[CorrectedRecipientFirstName] ,[CaseAddress1] ,[CaseAddress2] ,[CaseCity] ,[CaseState] ,[CaseZip] ,[RecipientBirthdate] ,[RecipientGenderCode] ,[RaceEthnicityCode] ,[SpanishLanguage] ,[UseOfLanguageIndicator] ,[OldRecipientLastName] ,[OldRecipientFirstName] ,[OldRecipientBirthdate] ,[OldRecipientGenderCode] ,[CaseLastName] ,[CaseFirstName] ,[ResponsiblePersonTelephoneNumber] ,[InsuranceLineCode] ,[PlanCoverageDescr] ,[RetroactiveFlag] ,[BenefitBeginDate] ,[BenefitEndDate]) SELECT CAST([FileID] as int) ,CAST([ImportRecordID] as int) ,CAST([TestCaseID] as varchar(50)) ,CAST([TestID] as varchar(10)) ,null as [TransmissionID] ,null as [GroupID] ,null as [SetID] ,null as [LoopID] ,CAST([FileType] as varchar(50)) ,CAST([FilePopulation] as varchar(50)) ,CAST(REPLACE([DataDescription], '"','') as varchar(5000)) as DataDescription ,CAST([InterchangeReceiverID] as varchar(15)) ,CAST([InterchangeDate] as varchar(6)) ,CAST([InterchangeTime] as varchar(4)) ,CAST([InterchangeControlNumber] as varchar(9)) ,CAST([ApplicationSendersCode] as varchar(15)) ,CAST([ApplicationReceiversCode] as varchar(15)) ,CAST([FunctionalGroupDate] as varchar(8)) ,CAST([FunctionalGroupTime] as varchar(6)) ,CAST([FunctionalGroupControlNumber] as varchar(9)) ,CAST([TransactionSetControlNumber] as varchar(9)) ,CAST([SegmentDate] as varchar(8)) ,CAST([SegmentTime] as varchar(6)) ,CAST([MaintenanceTypeCode] as varchar(3)) ,CAST([MaintenanceReasonCode] as varchar(3)) ,CAST([EmploymentStatusCode] as varchar(50)) ,CAST([RecipientID] as varchar(50)) ,CAST([OldSite] as varchar(50)) as Site ,CAST([CaseIDNumber] as varchar(50)) ,CAST([MedicaidBegin] as DATE) ,CAST([MedicaidEnd] as DATE) ,CAST([RecipientLastName] as varchar(50)) ,CAST([RecipientFirstName] as varchar(50)) ,CAST([TelephoneNumber] as varchar(50)) ,CAST([CorrectedRecipientLastName] as varchar(50)) ,CAST([CorrectedRecipientFirstName] as varchar(50)) ,CAST([CaseAddress1] as varchar(50)) ,CAST([CaseAddress2] as varchar(50)) ,CAST([CaseCity] as varchar(50)) ,CAST([CaseState] as varchar(50)) ,CAST([CaseZip] as varchar(50)) ,CAST([RecipientBirthdate] as varchar(50)) ,CAST([RecipientGenderCode] as varchar(50)) ,CAST([RaceEthnicityCode] as varchar(50)) ,CAST([SpanishLanguage] as varchar(50)) ,CAST([UseOfLanguageIndicator] as varchar(50)) ,CAST([OldRecipientLastName] as varchar(50)) ,CAST([OldRecipientFirstName] as varchar(50)) ,CAST([OldRecipientBirthdate] as varchar(50)) ,CAST([OldRecipientGenderCode] as varchar(50)) ,CAST([CaseLastName] as varchar(50)) ,CAST([CaseFirstName] as varchar(50)) ,CAST([ResponsiblePersonTelephoneNumber] as varchar(50)) ,CAST([InsuranceLineCode] as varchar(50)) ,CAST([PlanCoverageDescr] as varchar(50)) ,CAST([RetroactiveFlag] as varchar(50)) ,CAST([BenefitBeginDate] as DATE) ,CAST([BenefitEndDate] as DATE) FROM [GenesisStaging].[Staging].[EDITestCaseData2] 

Оказывается, проблема заключалась в том, что запятые были включены в поля в CSV, поэтому программа не могла правильно разобрать столбцы. Всем спасибо! Все замечательные советы, особенно bcp и ETL!

Давайте будем гением компьютера.