Подтвердить что ты не робот

Значение нарушало ограничения целостности для столбца

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

[OLE DB Destination [42]] Ошибка: произошла ошибка OLE DB. Код ошибки: 0x80040E21. Доступна запись OLE DB. Источник: "Исходный клиент Microsoft SQL" Hresult: 0x80040E21 Описание: "Операция с несколькими шагами OLE DB сгенерировала ошибки. Проверьте каждое значение статуса OLE DB, если оно доступно. Работа не была выполнена".

[Назначение OLE DB [42]] Ошибка: произошла ошибка с входным столбцом "Копия F2" (5164) на входе "Ввод назначения OLE DB" (55). Возвращаемый статус столбца: "Значение нарушало ограничения целостности для столбца".

[Назначение OLE DB [42]] Ошибка: "Входной вход" OLE DB Destination Input "(55)" не удался, потому что произошел код ошибки 0xC020907D, а расположение строки ошибки на "входном" входе назначения OLE DB "(55)" указывает на ошибку при ошибке. Произошла ошибка в указанном объекте указанного компонента.

[DTS.Pipeline] Ошибка: метод ProcessInput на компоненте "OLE DB Destination" (42) не выполнен с кодом ошибки 0xC0209029. Выбранный компонент возвратил ошибку из метода ProcessInput. Ошибка относится к компоненту, но ошибка является фатальной и приведет к прекращению работы задачи потока данных.

[DTS.Pipeline] Ошибка: поток "WorkThread0" вышел с кодом ошибки 0xC0209029.

[Источник Excel [174]] Ошибка: попытка добавить строку в буфер задачи потока данных завершилась неудачно с кодом ошибки 0xC0047020.

Ошибка [DTS.Pipeline]: метод PrimeOutput на компоненте "Источник Excel" (174) возвратил код ошибки 0xC02020C4. Компонент возвращал код сбоя, когда движок трубопровода назывался PrimeOutput(). Значение кода отказа определяется компонентом, но ошибка является фатальной, и конвейер прекратил выполнение.

4b9b3361

Ответ 1

Обычно это происходит, когда опция Разрешить Nulls не установлена.

Решение:

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

Попробуйте выполнить следующие действия. Это сработало для меня.

См. эту ссылку

Ответ 2

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

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

Решение: выберите все пустые строки на вашем листе, даже те, что указаны после последней строки данных, и нажмите "Удалить строки".

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

Ответ 3

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

enter image description here

enter image description here

Ответ 4

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

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

Чтобы обратиться к downvote, нет, действительно, как говорится: вы помещаете что-то в столбец, который не разрешен. Может быть, 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, вышеуказанный запрос больше не удовлетворяет этому. Законопроекты не платят, коллекции репозируют ваше здание, а теперь вы не работаете, все потому, что вы не проводили анализ влияния и т.д. И т.д.

Ответ 5

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

Ответ 6

Я обнаружил, что это может произойти по нескольким причинам.

В моем случае, когда я прокручиваю до конца 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, как упоминалось другими.

Ответ 7

Вы можете заменить значения "ноль" из исходного файла и поля/столбца.