2013-10-02 2 views
28

Я пытаюсь импортировать данные из файла Excel в базу данных SQL Server. Я не могу этого сделать, потому что я получаю следующие ошибки в файле журнала. Пожалуйста помоги. В erros журнала является следующей: -Значение нарушает ограничения целостности для столбца

[OLE DB Destination [42]] Error: An OLE DB error has occurred. Error code: 0x80040E21. An OLE DB record is available. Source: "Microsoft SQL Native Client" Hresult: 0x80040E21 Description: "Multiple-step OLE DB operation generated errors. Check each OLE DB status value, if available. No work was done.".

[OLE DB Destination [42]] Error: There was an error with input column "Copy of F2" (5164) on input "OLE DB Destination Input" (55). The column status returned was: "The value violated the integrity constraints for the column.".

[OLE DB Destination [42]] Error: The "input "OLE DB Destination Input" (55)" failed because error code 0xC020907D occurred, and the error row disposition on "input "OLE DB Destination Input" (55)" specifies failure on error. An error occurred on the specified object of the specified component.

[DTS.Pipeline] Error: The ProcessInput method on component "OLE DB Destination" (42) failed with error code 0xC0209029. The identified component returned an error from the ProcessInput method. The error is specific to the component, but the error is fatal and will cause the Data Flow task to stop running.

[DTS.Pipeline] Error: Thread "WorkThread0" has exited with error code 0xC0209029.

[Excel Source [174]] Error: The attempt to add a row to the Data Flow task buffer failed with error code 0xC0047020.

[DTS.Pipeline] Error: The PrimeOutput method on component "Excel Source" (174) returned error code 0xC02020C4. The component returned a failure code when the pipeline engine called PrimeOutput(). The meaning of the failure code is defined by the component, but the error is fatal and the pipeline stopped executing.

+0

Можете ли вы показать нам свой код? – StormeHawke

ответ

6

Это как сообщение об ошибке говорит: «Значение нарушило ограничение целостности для столбца» для столбца «Копия F2»

Сделать так, что Безразлично» t нарушает значение в целевой таблице. Какие допустимые значения, типы данных и т. Д. Не указаны в вашем вопросе, поэтому мы не можем быть более конкретными в ответе.

Чтобы обратиться к нисходящей линии, нет, это действительно так, как говорится: вы помещаете что-то в колонку, которая не допускается. Это может быть Faizan указывает, что вы помещаете NULL в колонку NOT NULLable, но это может быть целый ряд других вещей, и поскольку исходный плакат никогда не обновлял, мы должны угадать , Было ли ограничение внешнего ключа нарушением вставки? Может быть, есть проблема с проверкой? Возможно, исходный столбец в Excel имеет допустимое значение даты для Excel, которое недопустимо для типа данных даты/времени целевого столбца.

Таким образом, при определении конкретной информации, наилучшим ответом является «не делать то, что его ломает». В этом случае что-то о «Копии F2» плохо для целевого столбца. Дайте нам определения таблиц, предоставленные значения и т. Д., , а затем вы можете получить конкретные ответы.

Говорить людям, что столбцы NOT NULLable в NULLable могут быть правильным ответом. Это может быть и самый ужасный ответ, известный человечеству. Если существующий процесс ожидает, что всегда будет значение в столбце «Копия F2», изменение ограничения на NULL может привести к хаосу существующих запросов. Например

SELECT * FROM ArbitraryTable AS T WHERE T.[Copy of F2] = ''; 

В настоящее время этот запрос извлекает все, что было недавно импортированные из-за Copy of F2 это плохо названный индикатор состояния. Эти данные должны быть загружены в следующую систему, поэтому ... счета могут быть оплачены. Как только вы сделаете так, что необработанные строки могут иметь значение NULL, вышеуказанный запрос больше не удовлетворяет этому. Законопроекты не платят, коллекции Repòs свое здание, и теперь вы без работы, все потому, что вы не сделали анализ воздействия, и т.д., и т.д.

45

Это обычно происходит, когда Разрешить NULLS опция отключена ,

Решение:

  1. Посмотрите на имя столбца для этой ошибки/предупреждения.
  2. Перейти к SSMS и найти таблицу
  3. Разрешить Null для этой колонки
  4. Сохраните таблицу
  5. Перезапустите SSIS

Попробуйте эти шаги. Это сработало для меня.

See this link

+0

Это работа для меня.Спасибо – HurkanSeyhan

7

В качестве небольшой альтернативы @ FazianMubasher Ответит, вместо того, чтобы позволить NULL для указанного столбца (который может по многим причинам не представляется возможной), вы также можете добавить Условного Split Задачи расшириться NULL значения в файле ошибок, или просто игнорировать их:

enter image description here

enter image description here

+0

На второе ваше мнение :-) –

14

Удалить пустые строки из Excel после последней строки данных!

Несколько раз пустые строки в Excel по-прежнему считаются данными, поэтому попытка импортировать их в таблицу с одним или несколькими столбцами, не подлежащими обнулению, нарушает ограничения столбца.

Выберите все пустые строки на листе, даже те, что указаны после последней строки данных, и нажмите «Удалить строки».

Очевидно, что если некоторые из ваших данных действительно vioalte любой из ограничений вашей таблицы, то просто исправить свои данные, чтобы соответствовать правилам вашей базы данных ..

+0

Это сработало для меня, я думал, что сойду с ума. Спасибо! – Shadyn

+1

Конечно, это именно то, что помогло мне импортировать рабочий стол Excel 2007 в таблицу базы данных SQL Server 2014; были строки, которые казались пустыми под моими данными в электронной таблице, но они были форматированными строками. Удаление, которое позаботилось об этом. Благодаря! – ShieldOfSalvation

1

Teradata таблицы или просматривать магазины NULL, как «?» и SQL считает его символом или строкой. Это основная причина ошибки «Значение нарушает ограничения целостности для столбца»., когда данные переносятся из источника Teradata в место назначения SQL. Решение 1: Разрешить таблице адресата удерживать NULL Решение 2: Преобразовать '?' символ, который будет сохранен как некоторое значение в таблице назначения.

0

Я обнаружил, что это может произойти из-за целого ряда различных причин.

В моем случае, когда я прокручиваю до конца SQL-отчета «Отчет», под заголовком «После выполнения (Success)» будет указано, сколько строк было скопировано, и обычно это следующая строка на листе, есть проблема. Также вы можете указать, в каком столбце импортируются сообщения (в вашем случае это «Копия F2»), чтобы вы могли в целом узнать, какая из них является нарушающей ячейкой в ​​Excel.

Я видел, как это происходило по очень глупым причинам, например формат даты в Excel, который отличается от предыдущих строк. Например, ячейка A2 является «05/02/2017», а A3 - «5/2/2017» или даже «05-02-2017». Кажется, что импорт хочет, чтобы вещи были абсолютно последовательными.

Это происходит даже в случае, если форматы Excel отличаются друг от друга, поэтому если B2 является «512», а формат Excel «Число» и «В3» - «512», а формат «Текст» Excel, то ячейка вызовет ошибку.

У меня также были ситуации, когда мне буквально пришлось удалить все «пустые» строки под моими строками данных на листе Excel. Иногда они кажутся пустыми, но Excel считает, что они имеют «пустые» данные или что-то подобное, поэтому импорт пытается их импортировать. Обычно это происходит, если у вас были предыдущие данные на листе Excel, которые вы очистили, но не удалили строки должным образом.

И тогда есть очевидные причины попытки импортировать текстовое значение в целочисленный столбец или вставить NULL в столбцы NOT NULL, как упоминалось другими.

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